4

我在尝试确定我们网站上的代码覆盖率时遇到了问题。我让 PHPUnit 在我们的三个应用程序上运行我们的单元测试时生成一个 html 代码覆盖率报告。我们有一个公共应用程序、一个管理应用程序和一个报告应用程序。由于应用程序共享代码,我想以某种方式将这些组合成一份代码覆盖率报告。

似乎代码覆盖率只是计算测试“接触”的文件的覆盖率,因此计算中没有使用完全未经测试的文件。有谁知道如何将这些未使用的文件拉入计算中?有没有办法告诉覆盖生成器使用某些目录进行计算,以便它拉入未触及的文件?我在配置文件中为 phpunit 设置了一个白名单,设置为我们项目的根目录。欢迎所有评论,答案和建议。

4

5 回答 5

5

如果您在配置文件中设置了一个<whitelist>,您应该会看到所有未涵盖的文件。路径可能有问题,尝试绝对路径以查看它为某些文件创建 0% 的覆盖率,然后使相对路径起作用。phpunit.xml

为了结合覆盖范围,我所知道的 phpunit 没有太多可以做的事情。您可以手动组合覆盖结果(PHPUnit_Coverage 包),然后弄清楚如何呈现它们,但您需要手动完成。至少我不知道有任何项目/工具/方式可以为您做到这一点。

最简单的方法是在一次 phpunit 运行中运行所有 3 个测试套件,并让它为您所涉及的部分生成代码覆盖率。

于 2011-04-21T07:51:35.080 回答
2

<whitelist processUncoveredFilesFromWhitelist="true">像这样使用:

<filter>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">../folder/</directory>
  </whitelist>
</filter>
于 2012-11-10T12:14:15.940 回答
0

我遇到了同样的问题,我只是在运行测试套件之前添加了测试存根的生成(针对每个类和公共方法)。您甚至可以在 phpUnit 中选择:

http://www.phpunit.de/manual/current/en/skeleton-generator.html

于 2011-04-22T02:58:09.857 回答
-1

我认为 PHPUnit 使用 XDebug,它为实际执行的文件提供了字面上的覆盖率数据。它无法为从未执行过的文件提供数据,因为调试器永远不会看到它们。您可以手动修补 PHPUnit 机制,以将您认为在您的应用程序中的所有文件的列表添加到从 XDebug 返回的结果中。

我们的PHP 测试覆盖率工具的工作方式不同。你给它一个你认为是你的应用程序一部分的所有文件的列表;它可以帮助您构建此列表。(这与您必须修补到第一个解决方案中的列表相同)它检测所有提到的文件,并收集测试覆盖率数据。您现在获得的覆盖数据正确地包含了所有内容。它应该适用于 PHPUnit。

你可以走得更远。您可以为每个“单独的”应用程序创建测试覆盖率,并单独运行它们。然后,您可以组合所有它们的覆盖率数据,以查看整个集合的覆盖率。

于 2011-04-20T23:33:00.447 回答
-1

这听起来可能很疯狂,但为什么不创建一个递归循环遍历您的项目文件夹并在它找到的每个文件上运行 require_once 的测试用例呢?这应该允许 XDebug 为所需的每个文件创建一个新的代码覆盖率 html 文件。

于 2011-04-22T02:52:57.300 回答