4. Сопоставление тарифов
Цели обучения
В этом упражнении будут рассмотрены пользовательские сравнительные равенства, включенные в Unity Test Framework, такие как Vector3EqualityComparer. Они используются для утверждения на e.g. Векторы.
Введение и мотивация
Мы расширили возможности утверждения 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));
Список всех доступных пользовательских сравнителей см. в Пользовательские сравнители равенства.
2010 год
Аналогично проекту для упражнения 3, образец 4_CustomComparison содержит ValueOutputter class.
Убедитесь, что ValueOutputter возвращает правильные значения из своих методов:
GetVector3()должен возвращатьVector3, который примерно равен (10.333, 3, 9.666).GetFloat()должен возвращатьfloat, который примерно равен 19.333. Это то же самое, что и в предыдущем упражнении, но вы можете попытаться решить это с помощьюFloatEqualityComparer.GetQuaternionдолжен возвратить Кватернион объект, который должен быть примерно равен (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)));
}