如何确定PHPUnit测试是否正在运行?

时间:2012-04-20 20:39:20

标签: phpunit

我目前遇到一个问题,我必须在遗留代码中解决这个问题才能使我们与PHP扩展的交互正常工作(Singleton Testing Question)。

因此,我不想在使用应用程序运行常规生产代码时执行此代码。因此,如果正在执行的代码是作为测试的一部分执行,我需要检查常规PHP代码。

有关如何确定此问题的任何建议?我想到了一个与测试文件本身存在相关的定义变量(我们不会将测试发送给客户),但是我们的开发人员需要Extension才能正常工作,而CI服务器需要运行测试。

是否建议在PHPUnit.xml文件中设置Global?其他想法?

5 个答案:

答案 0 :(得分:34)

另一种方法是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!';
}

答案 1 :(得分:26)

在PHPUnit bootstrap.php文件中定义一个常量。这在加载或运行任何测试之前执行。这不应该影响正常运行应用程序的开发人员 - 只是单元测试。

答案 2 :(得分:10)

您可以检查$argv种不同的方式。

if(PHP_SAPI == 'cli') {

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

}

答案 3 :(得分:6)

如果您使用的是Laravel,而不是App::runningUnitTests()

答案 4 :(得分:3)

你可以定义常量,但这需要你的工作,没有拼写错误,而且它不是通用的。怎么做得更好?

PHPUnit自己定义了2个常量:

if (! defined('PHPUNIT_COMPOSER_INSTALL') && ! defined('__PHPUNIT_PHAR__')) {
    // is not PHPUnit run
    return;
}

// is PHPUnit