Модульное тестирование CodeIgniter с Simpletest - очень мало тестов - PullRequest
4 голосов
/ 16 ноября 2009

В нашей команде разработчиков мы решили попробовать модульное тестирование. Мы используем Simpletest. Однако это был тяжелый путь. Через неделю я создал только 1 модульный тест, который проверяет определенный вспомогательный файл. Вот и все. Остальные (контроллеры, модели, представления, библиотеки) пока не имеют модульных тестов. И я планирую не тестировать большинство из них. Например, представления слишком тривиальны для тестирования, поэтому я отказался от тестирования. Далее контроллеры. Я планирую, чтобы мои контроллеры не делали сложные вещи, чтобы они только передавали информацию между моделями и представлениями. Я бы перенес эти более сложные вещи в библиотеки или помощников.

Теперь на мои вопросы:

1) Я делаю это неправильно? Пока что я не вижу ничего такого, что могло бы быть ошибочным, поэтому потребовался бы модульный тест. Большинство вещей (прямо сейчас) просто CRUD.
2) Действительно ли нам нужно тестировать контроллеры? Поскольку работа контроллера - это просто незначительная обработка данных, передаваемых между View и Model, я нахожу очень мало инициативы в модульном тестировании.
3) Если я использую WebTestCase для тестирования контроллеров, это все еще будет считаться модульным тестом? Или это уже интеграционный тест?
4) Предположим, вы заставили меня проверить мой контроллер, как бы я его протестировал? Насколько я знаю, CI следует шаблону Front Controller через index.php, так как бы я справился (насмешливо?) С этим?

Ответы [ 2 ]

4 голосов
/ 13 января 2010

Если вы все еще открыты с предложением провести другой модульный тест для CodeIgniter, я советую попробовать Toast . Я обнаружил, что им легко пользоваться, и он не сильно мешает процессу разработки.

Я использую модульный тест только для проверки моей библиотеки, помощника и модели. Мой контроллер не имеет большого количества кода, только получает параметр post и uri, обрабатывает его с помощью trim или intval, передает его в библиотеку или модель, а затем передает результат для просмотра.

View почти не имеет кода для тестирования, поскольку он отображает все для браузера. В основном, это просто отладка css и js.

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

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

Надеюсь, это поможет.

3 голосов
/ 01 января 2010

Вы делаете что-то не так? Я так не думаю.

Нужно ли нам проверять контроллеры? Я не. Возможно я должен. Похоже, много работы.

Если я использую WebTestCase для тестирования контроллеров, это все еще будет считаться модульным тестом? Или это уже интеграционный тест? WebTestCase будет интересным подходом к тестированию контроллеров, если будет обнаружен какой-либо значимый вывод; например, обнаружение отсутствия ошибок при вызове /some/specific/path.

Предположим, вы заставили меня проверить мой контроллер, как бы я его протестировал? Это сложный вопрос. Вероятно, вам потребуется инициализировать часть среды приложения, чтобы сделать что-нибудь стоящее.

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

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

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

Что касается специфики, я использую Zend Framework, но в CodeIgniter это будет похоже. Я также использую SimpleTest (но с моей собственной оболочкой класса). Я могу или не могу модульно тестировать модели, и я никогда не выполнял тесты для контроллеров или представлений; Кажется, это слишком много работы и слишком мало пользы. Большинство фреймворков «терпят неудачу рано», поэтому проблемы обычно очевидны Но любой общий библиотечный код облегчает цели, а ошибки, особенно логические, обнаружить труднее. Настройте свои тесты, чтобы убедиться, что все работает так, как ожидается, чтобы ваш специфичный для фреймворка код сталкивался с небольшими проблемами.

...