Как провести модульное тестирование классов MVC? - PullRequest
10 голосов
/ 18 июня 2011

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 18 июня 2011

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

Итак, чтобы протестировать модель, следует ли включать некоторые части платформы в модульные тесты?

Меньше, тем лучше.Модульные тесты должны требовать практически никаких зависимостей.Если класс 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 какв отличие от юнит-тестирования в целом.

1 голос
/ 18 июня 2011

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

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

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

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

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

1 голос
/ 18 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...