【问题标题】:Code coverage report incorrectly indicating 100% coverage of a controller代码覆盖率报告错误地指示控制器的 100% 覆盖率
【发布时间】:2011-06-15 22:55:32
【问题描述】:

我正在运行一系列 PHPunit 测试,并且有一个控制器报告 100% 的覆盖率。 然而,在覆盖率报告中,它的 84 行代码中只有 5 行被标记为“绿色”

我想知道是什么因素导致了这个问题?

可能导致它的一个有趣点是“间接调用”。这个特定的控制器是许多其他控制器的父级,并且由于许多其他对象继承自它,因此代码可能会在其他地方被调用……但它不会变成绿色吗?

目前唯一变绿的方法是__construct 方法。

我不知道这是否真的足够继续,但如果有人对单元测试如何确定覆盖率有更多的了解,我很乐意听到。

编辑以回应`Gaurav的评论:

phpunit命令行是phpunit --configuration admin.xml

和 admin.xml 读取

 <phpunit bootstrap="./admin/applications/admin/bootstrap.php" colors="true">
     <testsuite name="AdminTestSuite">
        <directory suffix=".php">./admin/applications/admin/</directory>        
        <directory suffix=".php">./admin/applications/shared/</directory>
    </testsuite>
     <filter>
         <whitelist>
            <directory suffix=".php">../admin/applications/admin/controllers</directory>
            <directory suffix=".php">../admin/applications/shared/controllers</directory>           
            <directory suffix=".php">../admin/applications/shared/helpers</directory>
            <directory suffix=".php">../admin/lib/controllers</directory>           
            <directory suffix=".php">../admin/lib/helpers</directory>
            <directory suffix=".php">../admin/lib/models</directory>
            <directory suffix=".php">../admin/lib/utils</directory>         
         </whitelist>
         <blacklist>
                 <file>../dm_admin/applications/shared/controllers/DashboardController.php</file>
            <directory suffix=".php">../admin/lib/crons</directory>
         </blacklist>                
     </filter>
     <logging>
         <log type="coverage-html" target="/projects/ut/admin/" charset="UTF-8"
             yui="true" highlight="true"
             lowUpperBound="50" highLowerBound="80"/>
         <log type="testdox-html" target="/projects/ut/admin/testdox.html" />
     </logging>
 </phpunit>

回应 jakenoble:

助手正在读取 100% 的覆盖率

但我们在里面看到

它持续了 1099 行,偶尔有绿色...但没有红色。

【问题讨论】:

  • 如何调用代码并不重要。如果任何一行被执行,那么它将是绿色的。请让我知道您如何执行 phpunit 命令以及可能的 phpunit.xml 文件代码
  • 你能贴一张代码覆盖率的屏幕截图吗?

标签: php unit-testing testing phpunit code-coverage


【解决方案1】:

代码覆盖率报告显示三个不同的分数:类、方法和函数以及行。

Classes 是关于在实体中测试的类数量的报告。因此,如果您每个文件有一个类,并且您测试该类的一部分,它会在您测试 100% 的类时显示。

如果您在一个文件中有两个类,并且您测试一个类,那么您将拥有 50% 的类覆盖率。

【讨论】:

  • 但是正在运行的行没有改变颜色。他们都只是“白”
  • 嗯,是的,这完全是另一个问题。不确定。就代码覆盖率配置选项而言,您使用的 XML 文件与我的相同。愚蠢的问题,但是你能验证这些行在 HTML 级别被正确修改了吗?
  • 只是为了提供更多帮助,您将看到 lineCov 表示被覆盖的行,lineNoCov 表示未覆盖的行,以及 lineDeadCode,所有这些都是 HTML 类。至少,它们对我来说是这样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2016-03-21
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多