Більшість відповідей тут, мабуть, стосуються загальної практики тестування одиниць взагалі (коли, де, чому і що), а не написання самих тестів (як). Оскільки питання здавалося досить специфічним щодо частини "як", я подумав, що опублікую це, взяте з презентації "коричневої сумки", яку я провів у своїй компанії.
5 законів написання тестів Womp:
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");
- Проста, але корисна практика, яка дає зрозуміти, що у вашій програмі бігуна не вдалося. Якщо ви не надаєте повідомлення, у висновку про помилку, як правило, ви отримаєте щось на кшталт "Очікуване, що було помилково", що змушує вас насправді прочитати тест, щоб з’ясувати, що не так.
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. Кожен тест повинен завжди повертати стан будь-якого ресурсу, який він торкається
- Використовуйте глузування, де це можливо, щоб не мати справу з реальними ресурсами.
- Очищення потрібно проводити на рівні тесту. Тести не повинні залежати від порядку виконання.