#unit-testing #phpunit
#модульное тестирование #phpunit
Вопрос:
Я должен написать несколько модульных тестов, которые зависят от других модульных тестов. Для примера, есть функция для перемещения файлов: move_file()
. Чтобы протестировать эту функцию, сначала мне нужно создать файл, используя функцию save_file()
, которая включает другой метод в том же классе. Вызов save_file
функции включает в себя вызов UAPI cpanel, который включает некоторую аутентификацию. Итак, вызов save_file
функции необходим для создания файла. Допустимо ли записывать unittest в move_file()
метод, используя save_file()
метод для создания файла?
Ответ №1:
Похоже, вы вызываете cpanel UAPI из своего класса, поэтому ваши тесты на самом деле являются интеграционными тестами. Имеет ли это значение? Конечно.
Вообще говоря, чтобы что-то протестировать, вы должны настроить свою систему осмысленным образом. Как это сделать, зависит от того, что вы тестируете.
В модульных тестах вы тестируете объект изолированно. Если это зависит от чего-то внешнего, например, API, лучше всего создать для него абстракцию или тонкую оболочку. Это то, что вы можете легко подделать или подделать в своих тестах.
Но даже эта абстракция или оболочка в какой-то момент должна быть протестирована с реальной вещью. И вот тогда вы больше не можете притворяться. Вы не можете переместить файл, который не существует. Учитывая это, вполне допустимо вызвать другой метод, чтобы привести ваш тестовый сценарий в правильное состояние.