包含此页的版本:
不含此页的版本:
本练习将介绍 Unity 测试框架中包含的自定义相等比较器,例如Vector3EqualityComparer. 这些用于在例如向量上断言。
我们扩展了 NUnit 的断言功能,对特定于 Unity 的对象进行了一些自定义比较。一个很好的例子是能够比较两个Vector3对象。
其使用示例是:
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));
这使我们能够验证两个向量在给定容差内是否相同。默认情况下,公差为 0.0001f。可以通过提供新的Vector3EqualityComparer,而不是使用 .instance 中的默认值。例如,您可以使用以下命令将公差提高到 0.01f:
Assert.That(actual, Is.EqualTo(expected).Using(new Vector3EqualityComparer(0.01f));
有关所有可用自定义比较器的列表,请参阅自定义相等比较器。
与练习 3 的项目类似,示例 4_CustomComparison包含一个ValueOutputter类。
验证ValueOutputter从其方法返回正确的值:
GetVector3()应返回一个Vector3这大致等于 (10.333, 3, 9.666)。
GetFloat()应返回一个float这大约是 19.333。这与之前的练习相同,但您可以尝试使用FloatEqualityComparer.
GetQuaternion应返回一个四元数Unity 将旋转表示为数据的标准方式。在编写处理旋转的代码时,通常应该使用 Quaternion 类及其方法。更多信息
请参阅术语表对象,该对象应大致等于 (10f, 0f, 7.33333f, 0f)。
ToString上Vector3在显示值之前将其四舍五入,则字符串消息中的两个值可能相等,即使其Vector3价值观不是。示例中提供了完整的解决方案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)));
}