10. Испытания на длительную эксплуатацию
Цели обучения
В этом упражнении будут рассмотрены наилучшие методы и недостатки тестов с длительным временем выполнения, таких как тесты, возвращающие WaitForSeconds.
Введение и мотивация
В режиме воспроизведения UnityTests может возвращать Yield инструкции, такие как WaitForSeconds. Это поддерживается, потому что в некоторых случаях тестирования можно ожидать ограниченное время. Тем не менее, длительные тесты в целом являются плохой практикой, которой следует избегать, когда это возможно. Если вы не можете избежать длительного тестирования, рекомендуется предоставить тесту атрибуты [Category] и [Explicit]. Атрибут [Category] используется для обозначения тестов именем категории, которое позже может быть использовано в качестве фильтра для выборочного запуска подмножества тестов. Атрибут [Explicit] обеспечивает, что тест не запускается по умолчанию при запуске всех тестов. Тест запускается только тогда, когда он явно выбран в UI, или когда выбрана его категория.
[UnityTest]
[Explicit, Category("integration")]
public IEnumerator MySlowTest()
{
...
}
На практике это означает, что если вы дадите некоторым длительным тестам категорию «интеграция», то они будут запускаться только при выборе категории «интеграция». Это позволяет сохранить «Все тесты» относительно быстрыми, даже на большом проекте. Также можно указать, что тесты будут запускаться только в том случае, если будет выбрана категория «интеграция». [Explicit] и [Category] атрибуты на уровне класса — тогда они применяются ко всем тестам класса — и на уровне сборки, где применяются ко всем тестам внутри неё. Пример применения к сборкам:
[assembly:Explicit]
[assembly:Category("integration")]
Хорошо, если атрибуты уровня сборки определены в файле AssemblyInfo.cs.
2010 год
Импорт образец 10_LongRunningTests, который настроен с тестовой сборкой для режима воспроизведения.
Упражнение заключается в добавлении новой команды UnityTest, которая возвращает команду WaitForSeconds, а затем пометить ее соответствующим образом тегами [Category] и [Explicit].
При нажатии RunAll, тест должен быть пропущен. Если Категория выбрана в раскрывающемся списке категорий в UI, то тест не должен быть пропущен, если выбраны RunAll.
Решение
Образец 10_LongRunningTests_Solution содержит раствор.
Реализованный тест может выглядеть следующим образом:
[UnityTest]
[Explicit, Category("integration")]
public IEnumerator ASlowTest()
{
yield return new WaitForSeconds(5);
}
Дополнительные ресурсы
- Нет атрибута категории