Покрытие кода для кода не выполняется локально - PullRequest
1 голос
/ 19 ноября 2010

В настоящее время я разрабатываю простую инфраструктуру для PHP, которая управляет и отправляет вызовы ajax. Одна из его особенностей заключается в том, что он автоматически отправляет соответствующие заголовки в зависимости от того, что происходит в бэкэнде. За последние пару дней я начал писать множество модульных тестов для PHPUnit и пытаюсь получить приличное покрытие кода . (Да, большое покрытие кода само по себе ничего не значит, я знаю. Но это все же хороший показатель.)

Однако, поскольку (насколько мне известно) невозможно отправлять / проверять заголовки, когда PHP находится в режиме CLI, многие тесты необходимо выполнять через локальный веб-сервер. Это позволяет мне легко проверять заголовки и тело ответа. К сожалению, код, выполняемый во время этих тестов, естественно, не отслеживается PHPUnit. (Просто чтобы быть ясным: каждый фрагмент кода, который может быть проверен локально, проверяется локально. Но все, что связано с заголовками, не попадает в эту категорию.)

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

Итак, я думаю, что мой вопрос таков: могу ли я каким-то образом включить эти «удаленные вызовы» в мой отчет о покрытии кода? Или я (и это мое предположение) просто должен смириться с тем, что мне не хватает 100% покрытия кода для тестирования в реальных условиях?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2010

Очевидно, что сделать это невозможно.

Хотя ответ ircmaxell был интересным, он не отвечал на мой вопрос (поэтому я пометил этот ответ как принятый).

0 голосов
/ 19 ноября 2010

Ну, на практике практически невозможно получить 100% охват всей кодовой базы. Где вы действительно хотите, 100% находится в ядре приложения (библиотеки и повторно используемые компоненты). Остальное очень хорошо для тестирования, но если вы обнаружите, что есть ситуации, которые затрудняют его тестирование, так что не переживайте из-за нескольких строк кода, которые невозможно проверить.

Что касается вашей конкретной проблемы, я бы даже не стал писать модульные тесты для такого рода вещей. Я бы написал тесты пользовательского интерфейса с использованием Selenium HQ . Он по-прежнему полностью автоматизирован и работает из PHPUnit, но использует один или несколько браузеров. На самом деле это скорее интеграционный или приемочный тест, чем юнит-тест, но он работает довольно хорошо ...

...