Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定PHPUnit测试是否正在运行?_Phpunit - Fatal编程技术网

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

如何确定PHPUnit测试是否正在运行?,phpunit,Phpunit,我目前有一个问题,我必须在遗留代码中解决,以使我们与PHP扩展的交互正常工作() 因此,在使用应用程序运行正常的生产代码时,我不希望执行此代码。因此,我需要在常规PHP代码中检查正在执行的代码是否作为测试的一部分执行 关于如何确定这一点,有什么建议吗?我考虑了一个与测试文件本身相关的定义变量(我们不向客户提供测试),但是我们的开发人员需要扩展才能正常工作,而CI服务器需要运行测试 建议在PHPUnit.xml文件中使用全局集吗?其他想法?在PHPUnitbootstrap.php文件中定义一个常

我目前有一个问题,我必须在遗留代码中解决,以使我们与PHP扩展的交互正常工作()

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

关于如何确定这一点,有什么建议吗?我考虑了一个与测试文件本身相关的定义变量(我们不向客户提供测试),但是我们的开发人员需要扩展才能正常工作,而CI服务器需要运行测试


建议在PHPUnit.xml文件中使用全局集吗?其他想法?

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

另一种方法是:


您可以通过不同的方式检查
$argv

if(PHP_SAPI == 'cli') {

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

}
使用PHPUnit常量 您可以定义常量,但这需要您的工作,没有打字错误,也不是泛型。如何做得更好

PHPUnit自己定义了两个常量:

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

// is PHPUnit

如果您使用的是Laravel,那么就不要使用
App::runningUnitTests()

请记住,PHP奇怪地将未定义的常量计算为字符串(如果未定义
EXAMPLE
,它将被评估为
'EXAMPLE'
。这意味着,您应该使用
===
正确评估它。它仍然会抛出一个关于未定义常量的通知。
==
也不会匹配类型,因为它被定义为
true
(布尔值)但是他正在检查它是否是
1
(一个整数),它会失败吗?我理解你的评论,但在这个例子中,
==
更好。多亏了你的回答,我才发现(在
Laravel 5
APP_ENV
设置为
testing
。这使得实现您的答案变得非常简单。我真的向Laravel推荐此解决方案。现在有了一些PHPUnit值,这也是一个很好的解决方案。在这些值完全可用之前,我的答案比较旧。使用您自己的答案还可以让您知道什么是测试套件(如果您有多个)作为额外奖励运行。在PHPUnit v3.7.28中,要检查的常量是“PHPUnit_MAIN_METHOD”。您不应该使用不受支持的PHPUnit或PHP版本。这很危险-
if(PHP_SAPI == 'cli') {

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

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

// is PHPUnit