Как провести модульное тестирование классов MVC?


Я новичок в модульном тестировании в целом, но хотел реализовать его в шаблоне MVC (с использованием PHP). Теперь я не знаю, как к этому подойти.

Должно ли модульное тестирование быть встроено в платформу, или мы просто создадим новую папку под названием тесты и включим все необходимые классы и модульный тест для каждого из них?

Короче говоря, если существует модель M, она также имеет некоторую связь с самой структурой. Итак, чтобы протестировать модель, следует ли мне включать некоторые части фреймворка в модульные тесты ?

Есть ли несколько хороших примеров кода о том, как это сделать.

Author: Nemo, 2011-06-18

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 как в отличие от модульного тестирования в целом.

 8
Author: netcoder, 2011-06-18 15:33:23

Должно ли модульное тестирование быть встроено в платформу, или мы просто создадим новую папку под названием тесты

Если вы используете стороннюю платформу, она обычно включает в себя несколько помощников по модульному тестированию, но вы захотите поместить свои собственные тестовые классы в отдельную папку, чтобы (например) вы могли выпустить выпуск своего программного обеспечения для распространения, который их не включает.

Включить все необходимые классы и модульный тест каждого из них?

Вы будете как правило, у каждого класса приложений есть один тестовый класс. Итак, если у вас есть класс модели M, у вас будет тестовый класс M_Test (или любое другое соглашение об именовании, которое вы примете.)

Если вы еще не знакомы с PHPUnit, вы захотите взять его и прочитать их документы.

 1
Author: Alex Howansky, 2011-06-18 15:32:35

Модульное тестирование должно быть частью платформы MVC. Например, взгляните на главу Класс модульного тестирования руководства пользователя CodeIgniter.

 1
Author: Justin Ethier, 2014-02-01 01:39:23