Version: 6000.3
语言: 中文
3. 语义测试断言
5. 断言和期望日志

4. 自定义对比

学习目标

本练习将介绍 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)。

提示

  • 对于某些练习,您可能需要向比较器提供自定义容错度。
  • 如果比较失败,比较器会给出有关实际值和预期值的消息,就像普通断言一样。但是,由于ToStringVector3在显示值之前将其四舍五入,则字符串消息中的两个值可能相等,即使其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)));
}

其他资源

3. 语义测试断言
5. 断言和期望日志