php phpunit - Тестирование модулей в CakePHP?




1 Answers

Мне интересно, как вы, парни, тестируете в CakePHP? Как вы включаете тесты в проекты?

Обычно я использую самую простую установку, используемую Cake Core. Я установил тестовый файл для каждого контроллера и модели. Обычно я тестирую вывод помощников / компонентов / поведения, если код имеет сложные параметры или хелпер имеет в значительной степени переменную производительность. Я нахожу, что мой охват составляет около 65-75%, и что даже при такой низкой степени охвата кода моими испытаниями (65% ограниченного подмножества файлов довольно слабы) я обнаруживаю или исправляю больше ошибок с помощью тестов, чем я нашел исправлено правильно.

Какие части проекта вы испытываете? Как вы решаете, какие части проходят тестирование?

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

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

Я тестирую помощники для их вывода с определенными опциями. Я не всегда охватываю все перестановки массива параметров, но когда два разных ключа приводят к взаимоисключающему поведению, или я могу проверить, что в качестве атрибутов, включенных в мою разметку, можно проверить атрибуты predicatble - я тестирую эти сценарии.

Если какой-либо компонент принимает данные откуда-то и манипулирует им, я также проверяю формат или возвращаю данные о функциях компонентов. То же самое для поведения.

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

Вы, ребята, все еще можете закончить работу до крайнего срока?

Крайний срок для первого прохода здесь всегда слегка «мягкий» для учета тестирования и любых возникающих проблем. Я нахожу, что если вы используете простой старый карандаш и какую-нибудь графическую бумагу или доску, на которой вы можете легко найти базовый набор тестов, прежде чем писать какой-либо код. При таком подходе вы можете обнаружить, что проект занимает 25% больше времени, но на протяжении всего жизненного цикла приложения вы легко сбережете 25%, которые вы потратили на фронт, так как у вас не так много проблем.

Я отредактировал это, чтобы добавить некоторые ссылки, чтобы посмотреть как на фактические методы тестирования, так и на то, чтобы получить визуальное представление о том, как они объединяются.

  1. http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite
  2. http://book.cakephp.org/view/160/Testing
  3. http://debuggable.com/posts/unit-testing-in-cakephp-part-1---introduction-to-unit-testing:48102610-c5d0-4398-a010-76974834cda3
  4. http://mark-story.com/nodes/view/testing-cakephp-controllers-the-hard-way

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

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

Мне интересно, как вы, парни, тестируете в CakePHP? Как вы включаете тесты в проекты? Какие части проекта вы испытываете? Как вы решаете, какие части проходят тестирование? Вы, ребята, все еще можете закончить работу до крайнего срока?




Related