【问题标题】:PHPUnit code coverage for "require_once" statements“require_once”语句的 PHPUnit 代码覆盖率
【发布时间】:2017-02-22 04:27:44
【问题描述】:

我可以从代码覆盖范围中排除“require_once”语句吗?带有“require_once”的行被报告为未覆盖,但如果脚本中的其他行被覆盖,则不可能:

PHP 7.0.11、PHPUnit 5.5.7 和 XDebug 2.4.0 用于代码覆盖。

【问题讨论】:

    标签: php phpunit code-coverage xdebug


    【解决方案1】:

    PHPUnit documentation 中提到使用@codeCoverageIgnoreStart / @codeCoverageIgnoreEnd / @codeCoverageIgnore cmets 将代码块排除在覆盖范围之外。

    所以你可以试试这样的:

    // @codeCoverageIgnoreStart
    require_once __DIR__ . '/Data/TData.php';
    require_once __DIR__ . '/Data/Path.php';
    // @codeCoverageIgnoreEnd
    

    require_once __DIR__ . '/Data/TData.php'; // @codeCoverageIgnore
    require_once __DIR__ . '/Data/Path.php'; // @codeCoverageIgnore
    

    【讨论】:

      【解决方案2】:

      您已启用forceCoversAnnotation

      forceCoversAnnotation

      只有使用the section called "@covers" 中记录的@covers 注释的测试才会记录代码覆盖率。

      ——Appendix C. The XML Configuration File

      禁用forceCoversAnnotation 将覆盖require_once 调用。

      例如,您可以在phpunit.xml 配置文件中禁用forceCoversAnnotation

      <?xml version="1.0" encoding="UTF-8"?>
      <phpunit forceCoversAnnotation="false">
      ...
      

      如果您想使用@covers 注释,那么您需要禁用checkForUnintentionallyCoveredCode 或将require_once 调用包装在@codeCoverageIgnore* 注释中。

      要么

      <?xml version="1.0" encoding="UTF-8"?>
      <phpunit forceCoversAnnotation="true"
               checkForUnintentionallyCoveredCode="false">
      ...
      

      或者

      // @codeCoverageIgnoreStart
      require_once __DIR__ . '/Data/TData.php';
      require_once __DIR__ . '/Data/Path.php';
      // @codeCoverageIgnoreEnd
      

      原因是,使用forceCoversAnnotation 意味着您要明确指定所有内容。您可以使用@covers 注释来做到这一点。 @uses 注释让您指定测试有意覆盖的代码。但是@uses 不能用于指定导致副作用的代码,例如require_once 声明。这就是@codeCoverageIgnoreStart@codeCoverageIgnoreEnd 的用武之地,它允许您明确指定覆盖率应忽略的代码。

      这些注释大多是关于代码覆盖的严格性。

      【讨论】:

        猜你喜欢
        • 2012-05-04
        • 2017-09-01
        • 2012-08-04
        • 2018-05-29
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 2011-05-27
        相关资源
        最近更新 更多