test
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# 4\. Custom comparison
|
||||
|
||||
## Learning objectives
|
||||
|
||||
This exercise will cover the custom equality comparers included in Unity Test Framework, such as `Vector3EqualityComparer`. These are used to assert on e.g. Vectors.
|
||||
|
||||
## Intro and motivation
|
||||
|
||||
We have extended the assertion capabilities of NUnit with some custom comparisons for Unity-specific objects. A good example of this is the ability to compare two `Vector3` objects.
|
||||
|
||||
An example of its use is:
|
||||
|
||||
```
|
||||
actual = new Vector3(0.01f, 0.01f, 0f);
|
||||
expected = new Vector3(0.01f, 0.01f, 0f);
|
||||
|
||||
Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance));
|
||||
```
|
||||
|
||||
This allows us to verify that the two vectors are identical within a given tolerence. By default the tolerance is 0.0001f. The tolerance can be changed by providing a new `Vector3EqualityComparer`, instead of using the default in .instance. For example you can up the tolerance to 0.01f with the following:
|
||||
|
||||
```
|
||||
Assert.That(actual, Is.EqualTo(expected).Using(new Vector3EqualityComparer(0.01f));
|
||||
```
|
||||
|
||||
For a list of all available custom comparers, see [Custom equality comparers](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/reference-custom-equality-comparers.html).
|
||||
|
||||
## Exercise
|
||||
|
||||
Similar to the project for exercise 3, the [sample](./welcome.md#import-samples) `4_CustomComparison` contains a `ValueOutputter` class.
|
||||
|
||||
Verify that the `ValueOutputter` returns the correct values from its methods:
|
||||
|
||||
* `GetVector3()` should return a `Vector3` that is roughly equal to (10.333, 3, 9.666).
|
||||
|
||||
* `GetFloat()` should return a `float` that is roughly 19.333. This is the same as previous exercise, but you can try to solve this with a `FloatEqualityComparer`.
|
||||
|
||||
* `GetQuaternion` should return a [Quaternion](https://docs.unity3d.com/ScriptReference/Quaternion.html) object that should be roughly equal to (10f, 0f, 7.33333f, 0f).
|
||||
|
||||
## Hints
|
||||
|
||||
* For some of the exercises, you might need to provide a custom error tolerance to the comparer.
|
||||
* If the comparison fails, the comparers give a message about the actual and expected value, just like a normal assertion. However, because `ToString` on `Vector3` rounds the value off before displaying it, the two values in the string message might be equal, even when their `Vector3` values are not.
|
||||
|
||||
## Solution
|
||||
|
||||
The full solution is available in the sample `4_CustomComparison_Solution`.
|
||||
|
||||
```
|
||||
[Test]
|
||||
public void Vector3ReturnsCorrectValue()
|
||||
{
|
||||
var valueOutputterUnderTest = new ValueOutputter();
|
||||
|
||||
var vector3 = valueOutputterUnderTest.GetVector3();
|
||||
|
||||
var expected = new Vector3(10.333f, 3f, 9.666f);
|
||||
Assert.That(vector3, Is.EqualTo(expected).Using(new Vector3EqualityComparer(0.001f)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FloatReturnsCorrectValue()
|
||||
{
|
||||
var valueOutputterUnderTest = new ValueOutputter();
|
||||
|
||||
var actualFloat = valueOutputterUnderTest.GetFloat();
|
||||
|
||||
Assert.That(actualFloat, Is.EqualTo(19.333f).Using(new FloatEqualityComparer(0.001f)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void QuaternionReturnsCorrectValue()
|
||||
{
|
||||
var valueOutputterUnderTest = new ValueOutputter();
|
||||
|
||||
var actualValue = valueOutputterUnderTest.GetQuaternion();
|
||||
|
||||
var expectedValue = new Quaternion(10f, 0f, 7.33333f, 0f);
|
||||
Assert.That(actualValue, Is.EqualTo(expectedValue).Using(new QuaternionEqualityComparer(0.001f)));
|
||||
}
|
||||
```
|
||||
|
||||
## Further reading and resources
|
||||
|
||||
[Custom equality comparers](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/reference-custom-equality-comparers.html)
|
Reference in New Issue
Block a user