为单个文件生成新的代码覆盖率,而不清除PHPUnit中的所有其他覆盖率报告

时间:2012-09-28 14:21:32

标签: unit-testing phpunit code-coverage

首先是问题: 在PHPUnit 3.5中,有没有一种方法可以为单个测试生成覆盖率报告,而不会覆盖整个测试套件的报告。即仅更新受影响文件的覆盖率报告?我仍然希望输出转到同一个文件夹。

对于那些需要一些背景知识的人:

使用PHPUnit 3.5,我有一个追溯单元测试的项目。现在,为了知道哪些类仍然需要测试,我运行整个测试套件并生成一个html覆盖率报告。因为运行完整的套件需要一些时间,所以我想避免每次我想检查哪些测试仍然需要实现时运行它。但同时我也想要我正在处理的单元测试的覆盖率报告,这样我就可以确保我在一个类中执行每行代码(这当然来回非常快)所以运行整个套件只是为了生成这个报告是没有意义的。我可以为单个测试生成报告,我可以为整个套件生成报告。但我正在寻找的是混合型,它允许我首先为整个套件生成报告,然后只更新报告,其中包含我正在进行的测试的覆盖信息。

我已经设置了一个ruby脚本,它只会运行我正在处理的当前文件的测试并生成该文件的覆盖率报告。但是这样工作,它总是会重置所有其他文件的覆盖率报告,即使测试没有在这些类中执行任何操作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这在本地是不可能的,但如果您可以弄清楚如何从XML coverage数据文件重新生成HTML,则可以将脚本修改为

  1. 将完整运行的coverage XML复制到暂存区域。
  2. 运行单个测试时,将新XML文件复制到该区域。这必然不会合并覆盖同一类的两个测试的覆盖范围,但我从您的描述中猜测,您从每个测试中覆盖了一个类,反之亦然。
  3. 从XML重建HTML。你可以通过查看源代码来弄清楚如何做到这一点,但我怀疑它本身是否可能。