我正在运行一系列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行,偶尔有绿色...但没有红色。
最佳答案
代码覆盖率报告显示了三个不同的分数:类,方法和函数以及行。
类是有关实体中测试的类数的报告。因此,如果每个文件有一个类,并且测试了该类的一部分,那么它将在您测试100%的类时显示。
如果文件中有两个班级,并且测试了一个班级,则班级覆盖率将达到50%。
关于php - 代码覆盖率报告错误地指示 Controller 的100%覆盖率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4806691/