CodeIgniter и Unit-тесты. Что использовать?

Есть проект на CodeIgniter (4 Контроллера (3 из наследуются от главного), 4 модели (3 из них наследуются от главной), около 40 вьюшек, 8 хелперов ~ 5 000 написанного кода).

Стоит задача покрыть все это дело юнит-тестами, таким образом, чтобы можно было запустить все тесты один раз, и увидеть полный отчет.

В связи с чем вопросы:



1. Что использовать? Unit Test Class из CodeIgniter больше похож на assert, чем что-то нормальное. С ним я не смогу тестировать все одним запуском. С PHPUnit все усугубляется тем, что он не связан с CodeIgniter структурой и я не смогу просто инклудить какой-то класс потому, что не подтянутся все autoload, зависимости, прочие.



Контекст:

Mock я делать не могу, потому, что на БД все сильно завязано и важно знать об ошибках в БД, как об ошибках в входящих данных.



Также есть функции отправки милы, смс-ок. И это все участвует в бизнес-логике, что также хочется автоматически тестировать.
  • Вопрос задан
  • 6135 просмотров
Решения вопроса 1
TheHorse
@TheHorse Автор вопроса
Вопрос был не о том, что делать с бд и прочим, а об уровнях доступа и как получить доступ к тестируемому методу, а точнее ко всем тестируемым методам.

Придумал вот, что:
Для каждой модели и контроллера, внутри класса делаю метод test, и отдельный хелпер с набором тестов. В этом test просто запускаю все методы соответствующего хелпера (нужно еще подумать будет над синтаксисом), чтоб метод test был минимальным, а все тесты определялись исключительно в хелперах.
Потом, делаю один метод, для site.com/test, который запустит хоть через ajax все test для нужных контроллеров, которые запустят все тесты соответствующих моделей.

В итоге:
1. Открыв страницу я получу результаты всех unit-test-ов.
2. Минимальное влияние на тестируемый код (+1 метод во всех классах)
3. Нет надобности в каких-то дополнительных инструментах.

P. S. Прошу простить, вопрос скорее глупый, чем не глупый.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
pletinsky
@pletinsky
Если вы не можете сделать моки — то речь вообще не о юнит тестах и обычные фреймворки для юнит тестов вам могут не помочь. Юнит тесты это тесты на отдельные модули — обычно на методы класса в отрыви от внешнего окружения.
Не только от базы данных — а вообще от всех других классов.
И если так подходить к делу — то вам должно быть наплевать на то что юнит тесты чего то там не подтягивают.
Юнит тесты предполагают архитектурную готовность системы и обычно пишутся до кода в рамках TDD.

Если хотите сделать приложение стабильным — в вашем случае нужны behaviour тесты. Просто разворачивайте приложение как будто это делаете на продакшене — и тестируйте все его поведение в целом эмулируя действия пользователя на вебе.
Ответ написан
Попробуйте прикрутить Codeception от Davert насколько помню CI должно быть несложно прикрутить. Есть примеры для Kohana, ZF, Symfony, по аналогии должно быть несложно сделать для CI.
Ответ написан
pletinsky
@pletinsky
То есть можно конечно привязаться к разным уровням приложения в тестах — но в данном случая как я понимаю — вы не можете привязаться ни к чему — поэтому предлагаю привязаться к самому верхнему уровню из возможных, рассматривая внутренности приложения как блек бокс.
Все остальное очень зависит от делатей самого проекта — почему у вас там не получается оргинизовать подобие интеграционных тестов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы