Октябрь 12, 2013
Разновидности программных тестов

Юнит-тесты.

Минимальные низкоуровневые тесты для проверки минимального блока кода (юнита), «оторванного от реальности». Это может быть функция, метод или маленький утилитарный класс. Можно сказать, что юнит-тесты проверяют принцип единой обязанности на уровне методов и мелких классов без зависимостей.

Признаки юнит-тестов:
  • Все значения в памяти;
  • Нет обращений к инфраструктуре: нет потоков, нет файловой системы, нет БД;
  • Сложные зависимости и инфраструктура мокаются.

Интеграционные тесты

Более высокий уровень абстракции, чем юнит-тесты. Тестируют функциональность системы (в частности, класса) в связке с окружением и зависимостями. К тому же, тестируется взаимодействие составных частей (к примеру, последовательность состояний класса).

Признаки:
  • Тесты используют реальную инфраструктуру: потоки, БД, файловую систему, зависимости системы;
  • Тесты проверяют взаимодействие компонентов.
Приемочные/функциональные тесты

Еще более высокий уровень абстракции, чем интеграционные тесты. Тестируются фичи и их согласованность со спецификацией. По большей части проверяется то, что система производит нужный ответ на заданный ввод. При этом нас не интересует внутреннее состояние компонентов системы. Можно сказать, что система в приемочных тестах — черный ящик.

Признаки:
  • Тесты пишутся с точки зрения клиента системы;
  • Тесты ориентированы на проверку ключевых требований, предъявляемых к конкретной фиче;
  • Тесты проверяют соответствие ожиданий (спецификации) и реальности.
Вывод: эти виды тестов не исключают друг друга. Они находятся на разных уровнях абстракции. Можно сказать, что юнит-тесты и интеграционные тесты делают проверки с точки зрения программиста, а функциональные тесты — с точки зрения клиента. И да — бывают смешанные типы. К примеру, нам лень мокать зависимость от БД, но мы пишем «типа юнит-тест». В итоге получаем «интеграционный юнит-тест» (с минимальной зависимостью от БД), который в первую очередь проверяет поведение метода и, в качестве стороннего эффекта, интеграцию этого поведения с БД.
Теги: ,
Добавить комментарий:
Комментариев: (0)
Опубликовать