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

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


Юнит-тесты.

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

Признаки юнит-тестов:

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

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

Более высокий уровень абстракции, чем юнит-тесты. 

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

Признаки:

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

Приемочные/функциональные тесты

Еще более высокий уровень абстракции, чем интеграционные тесты.

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

Признаки:

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

Итого:

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

И да — бывают смешанные типы. К примеру, нам лень мокать зависимость от БД, но мы пишем «типа юнит-тест». В итоге получаем «интеграционный юнит-тест»(с минимальной зависимостью от БД) который в первую очередь проверяет поведение метода и в качестве стороннего эффекта — интеграцию этого поведения с БД.

Report Page