繁体   English   中英

PHPUnit的代码覆盖率

[英]Code Coverage with PHPUnit

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

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

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

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

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

使用<whitelist processUncoveredFilesFromWhitelist="true">如下所示:

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM