Большинство ответов здесь, похоже, относятся к лучшим практикам модульного тестирования в целом (когда, где, почему и что), а не к написанию самих тестов (как). Поскольку вопрос казался довольно конкретным в части «как», я решил опубликовать его, взятый из презентации «коричневого мешка», которую я проводил в своей компании.
5 законов написания тестов Вомпа:
1. Используйте длинные описательные названия методов тестирования.
- Map_DefaultConstructorShouldCreateEmptyGisMap()
- ShouldAlwaysDelegateXMLCorrectlyToTheCustomHandlers()
- Dog_Object_Should_Eat_Homework_Object_When_Hungry()
2. Напишите свои тесты в стиле « Упорядочить / Действовать / Утвердить» .
- Хотя эта организационная стратегия существует уже некоторое время и вызывает множество вещей, недавнее введение аббревиатуры «AAA» стало отличным способом передать это. Приведение всех ваших тестов в соответствие со стилем AAA упрощает их чтение и сопровождение.
3. Всегда предоставляйте сообщение о неудаче в своих утверждениях.
Assert.That(x == 2 && y == 2, "An incorrect number of begin/end element
processing events was raised by the XElementSerializer");
- Простая, но полезная практика, которая делает очевидным в вашем приложении runner, что не удалось. Если вы не предоставите сообщение, вы обычно получите что-то вроде «Ожидаемое истинное, было ложным» в вашем сообщении об ошибке, что заставляет вас фактически пойти прочитать тест, чтобы выяснить, что не так.
4. Прокомментируйте причину теста - каково бизнес-предположение?
/// A layer cannot be constructed with a null gisLayer, as every function
/// in the Layer class assumes that a valid gisLayer is present.
[Test]
public void ShouldNotAllowConstructionWithANullGisLayer()
{
}
- Это может показаться очевидным, но такая практика защитит целостность ваших тестов от людей, которые вообще не понимают причину этого теста. Я видел, как удалялись или изменялись многие тесты, которые были совершенно нормальными, просто потому, что человек не понимал предположений, которые проверял тест.
- Если тест тривиален или название метода достаточно информативно, можно оставить комментарий.
5. Каждый тест всегда должен возвращать состояние любого ресурса, которого он касается.
- По возможности используйте макеты, чтобы не иметь дело с реальными ресурсами.
- Очистку необходимо производить на тестовом уровне. Тесты не должны зависеть от порядка выполнения.