2013-09-25 3 views
0

Я новичок в TDD и phpunit.тестирование PHP_SAPI! = 'Cli' код с phpunit

Я тестирую код, который разветвляется на основе это метод выполнения:

if (PHP_SAPI!='cli') { 
    header('HTTP/1.1 '.$statusCode); 
} 

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

Есть ли способ обойти это? Или другой способ проверить эту часть?

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

+1

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

+0

Кстати, если бы вы делали TDD (записывая тест перед написанием кода), вы бы не столкнулись с этой проблемой в первую очередь. Так же, как дополнительная заметка и сделать термин TDD более понятным, я не сужу, мне потребовалось довольно много времени, пока я не понял преимущества в написании тестов в первую очередь. – hakre

ответ

0

Аннотация это сравнение в свой собственный метод. Измените этот метод в своем тесте, чтобы контролировать, входит ли он в этот блок.

if ($this->_isCli()) { 
    header('HTTP/1.1 '.$statusCode); 
} 

protected function _isCli() { 
    return PHP_SAPI!='cli'; 
} 
0

Если вы используете пакет Mockery, вы не можете высмеивать защищенные методы. Вот комментарий одного из разработчиков ->Calling a mocked protected method

Но вы можете создать правильный тест, если вы используете php_sapi_name родной функции

Тогда вы можете создать фиктивную функцию с тем же именем в тесте (внутри одного и того же пространства имен) для возврата любого значения.

или

использовать расширение в PHPUnit издеваться статические и встроенные функции ->phpunit-mockfunction

Смежные вопросы