Основное
Критерии хороших автономных тестов
- Заслуживающие доверия тесты
- Принять решение о том, когда удалять и изменять тесты
- Избегать логики в тестах
- Тестирование одного результата
- Разделение на автономные и интеграционные тесты
- Анализ кода и покрытие тестами
- Удобные для сопровождения тесты
- Тестирование закрытых и защищённых методов
- Устранение дублирования
- Применение методов подготовки без усложнения сопровождения (отказ от методов подготовки)
- Принудительная изоляция тестов
- Предотвращение нескольких утверждений о разных функциях
- Сравнение объектов (с использованием переопределённого ToEquals())
- Предотвращение избыточного специфицирования
- Проверка чисто внутреннего поведения
- Использование заглушек как подставок
- Предположение о порядке следования или точное сравнение, когда это не нужно
- Удобочитаемые тесты
- Наименование автономных тестов
- Наименование переменных
- Утверждение со смыслом
- Отделение утверждений от действий
- Подготовка и очистка
Рекомендации по тестопригодному проектированию
- По умолчанию делайте методы витруальными
- Проектируйте на основе интерфейсов
- По умолчанию делайте классы незапечатанными (не sealed)
- Избегайте создания экземпляров конкретных классов внутри методов, содержащих логику. Получайте экземпляры классов от вспомогательных методов, фабрик, DI-контейнеров, но не создавайте их напрямую.
- Избегайте прямых обращений к статическим методам. Предпочитайте вызовы методов экземпляра, из которых уже вызываются статические методы
- Избегайте конструкторов и статических конструкторов, содержащих логику.
- Отделяйте логику синглтонов от логики их создания
Виды тестирования
- Проверка значения
- Проверка состояния
- Проверка взаимодействия
Типы тестовых объектов
- Fake-объекты — подделки (могут быть или mock- или stub- объектами)
- Mock-объекты — подставки (проверка взаимодействия)
- Stub-объекты — заглушки (проверка значения или состояния)
Тестируется одна тестовая единица и проверяется одно взаимодействие или несколько значений или состояний, но не совместно.
Stub-объекты — заглушки

Mock-объекты — подставки

Дополнительная литература
Искусство автономного тестирования — Рой Ошероув