【问题标题】:Test coverage on PHPUnit 6.5.5 and PHP 7.2PHPUnit 6.5.5 和 PHP 7.2 的测试覆盖率
【发布时间】:2018-06-16 03:47:24
【问题描述】:

问题是带有 switch case 的行没有被覆盖,switch case 本身正在被执行。

在 Windows 上测试

【问题讨论】:

    标签: php phpunit code-coverage xdebug


    【解决方案1】:

    输出在技术上是正确的,因为 PHP 7.2 现在很聪明,不再需要运行 case 语句。我在https://derickrethans.nl/php7.2-switch.html

    上写过这些优化

    尽管如此,这是不受欢迎的行为,因此 Xdebug 用https://github.com/xdebug/xdebug/commit/0690bf83109228a67dfe14a9a312045435b7b774 修复了这个“错误”——这是 GitHub 上 Xdebug 代码的一部分,但尚未发布。它将进入 Xdebug 2.6.0beta2。

    【讨论】:

      【解决方案2】:

      这(可能)在https://github.com/sebastianbergmann/phpunit/issues/2953 中得到了回答。

      【讨论】:

      • 当您使用跟踪 (PHP) 虚拟指​​令(例如 XDebug)的东西来实现测试覆盖率工具时,您会遇到这种麻烦,因为“案例子句”没有被执行。出于同样的原因,在函数体和 if 语句上打开和关闭大括号会遇到类似的问题。如果您使用源代码检测来实现该工具,那么您(永远)不会遇到这种问题。一直使用源码插装的PHP测试覆盖工具见我公司的PHP测试覆盖工具:semanticdesigns.com/Products/TestCoverage/PHPTestCoverage.jsp
      【解决方案3】:

      最佳选择:pcov

      这比 XDebug 更快。更多信息https://github.com/krakjoe/pcov

      另一种选择:XDebug

      XDebuyg 永远是最好的选择,因为它是拥有最多社区和时间的选择。不好的是,与其他道路相比,它通常非常慢。不要忘记更新到最新版本;)。

      phpdbg的临时解决方案

      选项 1. 使用 CONSTANTS 而不是魔术字符串。例如:

      class SectionTypes
      {
          public const APP = 'app';
          public const SHARE = 'share';
      }
      
      /* ... */
      
      case ($type) {
          case SectionTypes::APP:
              /* do something */
              break;
      }
      

      选项 2. 使用串联。例如:

      case ($type) {
          case 'app'.'':
              /* do something */
              break;
      }
      

      当然,最后一个选项很丑,不是很推荐,但它可以快速帮助你。

      【讨论】:

        猜你喜欢
        • 2018-03-04
        • 2012-01-18
        • 2021-01-07
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 2018-10-18
        • 2018-03-30
        相关资源
        最近更新 更多