PHPUnit的代码覆盖率

时间:2011-04-20 22:02:59

标签: php phpunit code-coverage phpundercontrol

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

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

5 个答案:

答案 0 :(得分:4)

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

对于组合覆盖范围,你知道的phpunit并不多。您可以手动组合覆盖结果(PHPUnit_Coverage包),然后找出如何渲染它们,但您需要手动完成。至少我不知道为你做任何项目/工具/方式。

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

答案 1 :(得分:2)

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

<filter>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">../folder/</directory>
  </whitelist>
</filter>

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

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

我们PHP Test Coverage tool的工作方式不同。你给它一个你认为的所有文件的列表 是您申请的一部分;它可以帮助您构建此列表。 (这与您必须修补到第一个解决方案的列表相同)它将所有文件用于检测,并收集测试覆盖率数据。您现在获得的覆盖数据包括正确的一切。它应该可以正常使用PHPUnit。

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

答案 4 :(得分:-1)

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