【发布时间】:2015-05-16 08:30:57
【问题描述】:
我的测试代码充满了最终的静态类。虽然我们无法重构它以获得更好的测试,但我有一个中间解决方案,可以在它自己的进程上运行几个小测试。一切正常。但我没有得到覆盖率报告,因为一个覆盖另一个。
我目前正在 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 单元上正确进行进程隔离的另一个问题。我很好地运行了几次,我只想要一个完整的覆盖率报告:)
有没有办法让测试像第一个代码块一样正确运行(即在多个进程上避免污染全局类声明空间),但仍然有全面的代码覆盖率报告?
谢谢!
【问题讨论】:
标签: php unit-testing phpunit