【问题标题】:How to Determine if PHPUnit Tests are Running?如何确定 PHPUnit 测试是否正在运行?
【发布时间】:2012-05-02 10:52:12
【问题描述】:

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

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

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

是否推荐在 PHPUnit.xml 文件中设置全局集?其他想法?

【问题讨论】:

    标签: phpunit


    【解决方案1】:

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

    【讨论】:

    • 请记住,PHP 奇怪地将未定义的常量评估为字符串(如果未定义 EXAMPLE,则将其评估为 'EXAMPLE'。意思是,您应该使用 === 正确评估它. 它仍然会抛出一个关于未定义常量的通知。
    • 不会=== 也匹配类型,因为它被定义为true(一个布尔值)但他正在检查它是否是1(一个整数),它会失败?我理解您的评论,但在此示例中,== 更好。
    • 感谢您的回答,我发现(在 Laravel 5 中)APP_ENV 设置为 testing。这使得实现您的答案变得非常容易。我真的会为 Laravel 推荐这个解决方案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果您使用 Laravel,请使用 App::runningUnitTests()

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          使用 PHPUnit 常量

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

          PHPUnit 自己定义了 2 个常量:

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

          【讨论】:

          • 现在有一些 PHPUnit 值,这也是一个很好的解决方案。在这些完全可用之前,我的答案是旧的。使用您自己的还可以让您知道正在运行的测试套件(如果您有多个)作为额外奖励。
          • 在 PHPUnit v3.7.28 中,要检查的常量是 'PHPUnit_MAIN_METHOD'。
          • 您不应使用不受支持的 PHPUnit 或 PHP 版本。这很危险 - php.net/supported-versions.php
          猜你喜欢
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 2012-01-08
          • 2016-03-20
          • 2015-04-02
          • 2012-08-31
          相关资源
          最近更新 更多