Написание модульных тестов, которые зависят от других функций в том же классе

#unit-testing #phpunit

#модульное тестирование #phpunit

Вопрос:

Я должен написать несколько модульных тестов, которые зависят от других модульных тестов. Для примера, есть функция для перемещения файлов: move_file() . Чтобы протестировать эту функцию, сначала мне нужно создать файл, используя функцию save_file() , которая включает другой метод в том же классе. Вызов save_file функции включает в себя вызов UAPI cpanel, который включает некоторую аутентификацию. Итак, вызов save_file функции необходим для создания файла. Допустимо ли записывать unittest в move_file() метод, используя save_file() метод для создания файла?

Ответ №1:

Похоже, вы вызываете cpanel UAPI из своего класса, поэтому ваши тесты на самом деле являются интеграционными тестами. Имеет ли это значение? Конечно.

Вообще говоря, чтобы что-то протестировать, вы должны настроить свою систему осмысленным образом. Как это сделать, зависит от того, что вы тестируете.

В модульных тестах вы тестируете объект изолированно. Если это зависит от чего-то внешнего, например, API, лучше всего создать для него абстракцию или тонкую оболочку. Это то, что вы можете легко подделать или подделать в своих тестах.

Но даже эта абстракция или оболочка в какой-то момент должна быть протестирована с реальной вещью. И вот тогда вы больше не можете притворяться. Вы не можете переместить файл, который не существует. Учитывая это, вполне допустимо вызвать другой метод, чтобы привести ваш тестовый сценарий в правильное состояние.