Это важное различие, но, к сожалению, вы никогда не найдете согласия. Проблема в том, что большинство разработчиков определяют их со своей точки зрения. Это очень похоже на дебаты о Плутоне. (Если бы это было ближе к Солнцу, было бы это планетой?)
Модульное тестирование легко определить. Он проверяет CUT ( тестируемый код ) и ничего больше. (Ну, как можно меньше.) Это означает насмешки, подделки и приспособления.
На другом конце спектра находится то, что многие называют тестированием системной интеграции . Это максимально возможное тестирование, но поиск ошибок в вашем собственном CUT.
Но как насчет огромного пространства между ними?
- Например, что, если вы протестируете немного больше, чем CUT? Что, если вы включите функцию Фибоначчи вместо того, чтобы использовать приспособление, которое вы ввели? Я бы назвал это функциональным тестированием , но мир со мной не согласен.
- Что если включить
time()
или rand()
? А если позвонить http://google.com
? Я бы назвал это системным тестированием , но опять же, я один.
Почему это важно? Потому что системные тесты ненадежны. Они необходимы, но иногда они не работают по причинам, не зависящим от вас. С другой стороны, функциональные тесты всегда должны проходить, а не отказываться случайно; если они быстрые, их можно использовать с самого начала, чтобы использовать разработку через тестирование без написания слишком большого количества тестов для вашей внутренней реализации. Другими словами, я считаю, что юнит-тесты могут доставлять больше хлопот, чем они того стоят, и у меня хорошая компания .
Я провожу тесты по 3 осям, со всеми их нулями при модульном тестировании :
- Функциональное тестирование: использование реального кода все глубже и глубже в стеке вызовов.
- Интеграция тестирования: все выше и выше вверх ваш вызов в стек; другими словами, тестирование вашего CUT путем запуска кода, который будет его использовать.
- Системное тестирование: все больше и больше неповторимых операций (планировщик O / S, часы, сеть и т. Д. )
В тесте легко может быть все три, в разной степени.