我们正在使用phpunit像这样对我们的类进行单元测试
namespace VendorName/SystemName {
final class TestableClass { /** ... */ }
}
namespace VendorName/SystemName/Tests {
/**
* @group unit
* @covers /VendorName/SystemName/TestableClass
*/
final class TestableClassTest extends TestCase { /** ... */ }
}
当我们运行这些测试时,TestableClass
被正确覆盖了,但是我们也想看看,由于我们有时会像处理死代码一样,TestableClassTest中的每一行代码是否都被执行了?
/**
* @expectedException /InvalidArgumentException
*/
public function testSomeMethodThrowsException(): void
{
// do some arrangement
// call the tested method
$testable->someMethod();
// do some post-call assertions
self::assertBar($baz);
self::assertFoo($baz);
// lines above are actually dead code
// if test goes right and throws exception
}
因此,我们也不会获取测试的覆盖率统计信息。
直接的方法是在每个测试类中添加@covers /VendorName/SystemName/Tests/TestableClassTest
,但这需要大量的手工工作。
是否有一种正确的方法来自动获得测试用例的覆盖范围(可能是侦听器或配置或其他phpunit hacks)