php - 如何多次运行 php 单元并连接覆盖率报告?

标签 php unit-testing phpunit

我的测试代码充满了最终的静态类。虽然我们不能重构它以获得更好的测试,但我有一个中间解决方案,可以在它自己的进程上运行几个小测试。一切正常。但是我没有得到覆盖率报告,因为一个覆盖了另一个。

我目前正在 clover 中生成报告,但我对其他报告非常开放。

我的测试仅在 phpunit 运行时有效:

/home/y/bin/phpunit --coverage-html clover --coverage-clover clover/report.xml --include-path src/  tests/aTest.php
OK (1 test, 1 assertions)
/home/y/bin/phpunit --coverage-html clover --coverage-clover clover/report.xml --include-path src/  tests/bTest.php
OK (1 test, 1 assertions)
/home/y/bin/phpunit --coverage-html clover --coverage-clover clover/report.xml --include-path src/  tests/cTest.php
OK (1 test, 1 assertions)

但这将导致每次运行都删除前一次的报告。所以我只得到最后一个的报告。如果我尝试按照 phpunit 期望生成完整报告的方式运行它们,我就会失败,因为我所有的类都包含它们自己的静态类。

/home/y/bin/phpunit --coverage-html clover --coverage-clover clover/report.xml --include-path src/  tests/
. (first test pass)
PHP Fatal error:  Cannot redeclare class Something
make[1]: *** [phpunit_run] Error 255

(但即使使用 --process-isolation --no-globals-backup 上面的内容也会失败,因为它们的意思并不完全......) - 这不是另一个问题如何在 php 单元上获得正确的进程隔离。我运行了几次都没问题,我只想要一份完整的覆盖率报告:)

有没有办法让测试像第一个代码块一样正确运行(即在多个进程上以避免污染全局类声明空间),但仍然有全面的代码覆盖率报告?

谢谢!

最佳答案

Schleis 的回答对我不起作用。在我的例子中,unserialize() 方法抛出一个错误:偏移量错误...

然而,有一种非常简单的方法可以实现这一点:

按照说明下载 phpcov here .

让 phpunit 生成 php 覆盖率报告:

phpunit --coverage-php coverage/cov/foo.cov tests/foo
phpunit --coverage-php coverage/cov/bar.cov tests/bar

现在您有 2 个 .cov 文件。然后在你最喜欢的 shell 中:

phpcov merge --clover clover.xml /coverage/cov

它将生成一个 clover.xml 报告文件。

关于php - 如何多次运行 php 单元并连接覆盖率报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29039343/

相关文章:

PHP/MYSQL/社交网络关注者最佳实践表结构

php - 我如何检查 php 中字符串的开头?

python - @mock.patch 如何知道每个模拟对象使用哪个参数?

Java Mock 抛出一个异常,然后返回一个值?

phpunit - slim3 中的 Controller 单元测试

php - 什么时候使用 if/endif 与 If{}?

php - 文件大小(): giving incorrect result

javascript - 什么相当于 sinonjs 中的 jasmine.createSpy().and.callFake(fn)

git - 如何在没有完整项目的情况下测试共享的 Symfony 2 Bundle

php - 为什么我应该使用 PHP 测试框架?