Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Мне интересно, как вы, ребята? единичный тест в CakePHP? Как ты включать тесты в проекты?

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

Что части проекта вы испытываете? Как вы решаете, какие части Блок-тестирование?

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

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

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

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

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

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

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


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

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

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

Ответ 2

Вы можете взглянуть на this.

Я не очень хорошо знаком с CakePHP, но обычно использую PHPUnit. Я использую Netbeans, который хорошо интегрирует PHPUnit (я не знаю, является ли это для вас вариантом). Можно запускать модульные тесты независимо от используемой веб-структуры.

Я обычно тестирую все возможности подключения источника данных (весь уровень доступа к данным) и гарантирую, что персистентность работает так, как ожидалось. Кроме того, если у вас есть какая-либо бизнес-логика в вашем приложении, протестируйте ее, чтобы вы знали, что она действительно работает. У меня нет опыта в тестировании, но я предполагаю, что другие предложили бы вам проверить свои взгляды. Лично я использую F5 в браузере для этого, хе-хе:). Когда дело доходит до функциональности AJAX, я тестирую каждый его бит (запрос делает свою работу и/или возвращает желаемый результат).

Что касается времени/сроков, то, что определенно, является то, что ваш проект выиграет от тестирования. Вероятность превышения предельного срока больше, если вы не используете какую-либо форму тестирования, чтобы гарантировать, что строительные блоки вашего приложения работают так, как вы хотите. Скажем, ваше приложение растет (что в большинстве случаев делает), у вас нет никаких модульных тестов, и ваше приложение терпит неудачу. Как вы знаете, где отлаживать, и сколько еще времени вы будете искать в поиске проблемы? Главное понять, что гарантирование того, что небольшие фрагменты кода действительно важны, когда вы получаете много из этих небольших кусков.

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