TDD: тестовое приложение MVC - PullRequest
       12

TDD: тестовое приложение MVC

4 голосов
/ 17 сентября 2011

Я начал с нуля новое приложение, использующее TDD и PHPUnit.Это будет приложение MVC.Я начал свои тесты от модели.Это было весело, и у меня не было особых проблем.

Теперь я хочу создать свои виды / модели.Но вопрос в том, как мне проверить мои контроллеры?А как насчет просмотров?Мой контроллер будет использовать мои проверенные модели и мои будущие представления.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 03 октября 2011

Существует три широких категории тестирования для каждого слоя в MVC.Модульные тесты для моделей, функциональные тесты для контроллеров и UI-тестирование для представлений.

Модульные тесты проще всего написать.Они дешевы с точки зрения времени и не требуют слишком большого количества зависимостей, чтобы их заглушить / смоделировать.

Функциональные тесты, с другой стороны, немного дороже по сравнению с модульным тестом.В данном сценарии, если вы достаточно подробно рассмотрели в своем приложении модели, использующие модульное тестирование, вы можете немного расслабиться в части функционального тестирования.Тем не менее, вы все равно должны иметь хорошее покрытие кода - 100%, чтобы быть идеальным и для методов вашего контроллера.

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

И рекомендуется установить CI - Continious Integration с утилитой покрытия кода, которая даеттенденция в% кода, пройденного тестами.

2 голосов
/ 17 сентября 2011

Когда вы запускаете тесты, вы должны использовать только тестируемый класс. Другие объекты должны быть заменены насмешками или другими поддельными конструкциями.

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

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

Некоторые ссылки, которые могут оказаться полезными

...