Как провести модульное тестирование классов MVC?
Я новичок в модульном тестировании в целом, но хотел реализовать его в шаблоне MVC (с использованием PHP). Теперь я не знаю, как к этому подойти.
Должно ли модульное тестирование быть встроено в платформу, или мы просто создадим новую папку под названием тесты и включим все необходимые классы и модульный тест для каждого из них?
Короче говоря, если существует модель M, она также имеет некоторую связь с самой структурой. Итак, чтобы протестировать модель, следует ли мне включать некоторые части фреймворка в модульные тесты ?
Есть ли несколько хороших примеров кода о том, как это сделать.
3 answers
Должно ли модульное тестирование быть встроено в фреймворк, или мы просто создадим новую папку под названием тесты и включим все необходимые классы и модульное тестирование каждого из них?
Вам определенно следует создать для него отдельную папку. Загромождение производственного кода тестами, как правило, не является хорошей идеей по соображениям производительности и отладки.
Итак, чтобы протестировать модель, следует ли мне включить некоторые части фреймворка в модульные тесты?
В чем меньше, тем лучше. Модульные тесты должны требовать практически никаких зависимостей. Если класс A
зависит от B
, вы должны издеваться над B
, чтобы убедиться, что если B
завершится неудачей, это не приведет к тому, что A
тоже завершится неудачей.
Главное преимущество модульных тестов (при правильном выполнении) заключается в том, что они позволяют легко определить проблему. Если A
завершится неудачей из-за его зависимости B
, вы сначала посмотрите на A
, затем B
. Опять же, если B
зависит от C
и C
не удается, вам придется изучить A
, B
и затем C
. Это в значительной степени разрушает одно из величайших преимуществ модульного тестирования. Если все тесты выполнены правильно, сбой в C
не приведет к сбою нигде, кроме как в C
, поэтому у вас будет один класс для поиска, чтобы устранить проблему.
Чтобы действительно сделать ваш код устойчивым к ошибкам, вы можете использовать модульные тесты в сочетании с утверждениями PHP:
$return = $this->addOne($some_param);
assert('$return == $some_param + 1');
Кстати, нет никакой разницы между модульным тестированием MVC как в отличие от модульного тестирования в целом.
Должно ли модульное тестирование быть встроено в платформу, или мы просто создадим новую папку под названием тесты
Если вы используете стороннюю платформу, она обычно включает в себя несколько помощников по модульному тестированию, но вы захотите поместить свои собственные тестовые классы в отдельную папку, чтобы (например) вы могли выпустить выпуск своего программного обеспечения для распространения, который их не включает.
Включить все необходимые классы и модульный тест каждого из них?
Вы будете как правило, у каждого класса приложений есть один тестовый класс. Итак, если у вас есть класс модели M, у вас будет тестовый класс M_Test (или любое другое соглашение об именовании, которое вы примете.)
Если вы еще не знакомы с PHPUnit
, вы захотите взять его и прочитать их документы.
Модульное тестирование должно быть частью платформы MVC. Например, взгляните на главу Класс модульного тестирования руководства пользователя CodeIgniter.