Unit тестирование

Основное

Критерии хороших автономных тестов

  • Заслуживающие доверия тесты
    • Принять решение о том, когда удалять и изменять тесты
    • Избегать логики в тестах
    • Тестирование одного результата
    • Разделение на автономные и интеграционные тесты
    • Анализ кода и покрытие тестами
  • Удобные для сопровождения тесты
    • Тестирование закрытых и защищённых методов
    • Устранение дублирования
    • Применение методов подготовки без усложнения сопровождения (отказ от методов подготовки)
    • Принудительная изоляция тестов
    • Предотвращение нескольких утверждений о разных функциях
    • Сравнение объектов (с использованием переопределённого ToEquals())
    • Предотвращение избыточного специфицирования
      • Проверка чисто внутреннего поведения
      • Использование заглушек как подставок
      • Предположение о порядке следования или точное сравнение, когда это не нужно
  • Удобочитаемые тесты
    • Наименование автономных тестов
    • Наименование переменных
    • Утверждение со смыслом
    • Отделение утверждений от действий
    • Подготовка и очистка

Рекомендации по тестопригодному проектированию

  • По умолчанию делайте методы витруальными
  • Проектируйте на основе интерфейсов
  • По умолчанию делайте классы незапечатанными (не sealed)
  • Избегайте создания экземпляров конкретных классов внутри методов, содержащих логику. Получайте экземпляры классов от вспомогательных методов, фабрик, DI-контейнеров, но не создавайте их напрямую.
  • Избегайте прямых обращений к статическим методам. Предпочитайте вызовы методов экземпляра, из которых уже вызываются статические методы
  • Избегайте конструкторов и статических конструкторов, содержащих логику.
  • Отделяйте логику синглтонов от логики их создания

Виды тестирования

  • Проверка значения
  • Проверка состояния
  • Проверка взаимодействия

Типы тестовых объектов 

  • Fake-объекты — подделки (могут быть или mock- или stub- объектами)
  • Mock-объекты — подставки (проверка взаимодействия)
  • Stub-объекты — заглушки (проверка значения или состояния)

Тестируется одна тестовая единица и проверяется одно взаимодействие или несколько значений или состояний, но не совместно.

Stub-объекты — заглушки

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

Дополнительная литература

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


Добавить комментарий