2012-04-20 6 views
21

У меня в настоящее время проблема, с которой мне приходится работать в устаревшем коде, чтобы наше взаимодействие с PHP-расширением работало правильно (Singleton Testing Question).Как определить, работают ли тесты PHPUnit?

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

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

Может быть рекомендован глобальный набор в файле PHPUnit.xml? Другие мысли?

ответ

23

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

+0

Спасибо. Это работает как шарм, и я все еще могу обнаружить среду разработки для других процессов кода. –

+0

Отлично, отлично работал здесь. Огромное спасибо. – GoinAum

29

Альтернативный подход заключается в set a constant in the PHP section of your phpunit.xml.*:

<php> 
    <const name="PHPUNIT_YOURAPPLICATION_TESTSUITE" value="true"/> 
</php> 

В вашем PHP приложении, вы можете затем использовать следующую проверку:

if (defined('PHPUNIT_YOURAPPLICATION_TESTSUITE') && PHPUNIT_YOURAPPLICATION_TESTSUITE) 
{ 
    echo 'TestSuite running!'; 
} 
+0

Имейте в виду, что PHP странно оценивает неопределенную константу как строку (если 'EXAMPLE' не определен, он оценивается как' 'EXAMPLE''. Значит, вы должны правильно оценить его, используя' === '. все равно выдаст уведомление о неопределенной константе. –

+2

Не будет '===' также соответствовать типу up, и поскольку он определен как 'true' (логический), но он проверяет, является ли это' 1' (целое число) , это не сработает? Я понимаю ваш комментарий, но в этом примере, '==' лучше. –

+3

Благодаря вашему ответу я обнаружил, что (в 'Laravel 5') для' APP_ENV' установлено 'тестирование'. я действительно рекомендую это решение для Laravel. –

10

Вы можете проверить различными способами.

if(PHP_SAPI == 'cli') { 

    if(strpos($_SERVER['argv'][0], 'phpunit') !== FALSE) { ... } 
    // or 
    if($_SERVER['argv'][0] == '/usr/bin/phpunit') { ... } 

} 
+2

$ _SERVER ['argv'] [0] вместо $ argv [0] –

1

Я использую файл журнала Laravel для определения того, выполняются ли тесты PHPUnit.

+5

В Laravel phpunit.xml устанавливает 'APP_ENV' на' test'. Может быть, это проще для вас, чем файл журнала? (просто предложение) –

+0

Спасибо, приятно знать. –

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