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