首页 文章

PHPUnit的代码覆盖率

提问于
浏览
4

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

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

5 回答

  • 2

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

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

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

  • -1

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

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

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

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

  • -1

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

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

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

  • 4

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

相关问题