我测试的代码充满了最终静态类。虽然我们无法重构它以进行更好的测试,但我有一个中间解决方案,可以在其自己的进程上运行几个小测试。一切正常。但我没有收到覆盖报告,因为其中一个覆盖了另一个。
我目前正在 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 单元上正确进行进程隔离的问题。我可以运行几次,我只想要一份完整的覆盖率报告:)
有没有办法让测试像第一个代码块一样正确运行(即在多个进程上以避免全局类声明空间被污染),但仍然有全面的代码覆盖率报告?
谢谢你!
施莱斯的回答对我不起作用。在我的例子中,unserialize() 方法抛出一个错误:Error at offset...
然而,有一个非常简单的方法可以实现这一目标:
按照描述下载 phpcovhere.
让 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 报告文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)