Unity 6.3
0 онлайн 53 гостей 3 в системе
Вход

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)));
}

Дополнительные ресурсы