计算phpunit测试类的代码覆盖率

计算phpunit测试类的代码覆盖率,php,phpunit,code-coverage,Php,Phpunit,Code Coverage,我们使用phpunit像这样对类进行单元测试 名称空间VendorName/SystemName{ 最终类可测试类{/**…*/} } 名称空间VendorName/SystemName/Tests{ /** *@集团单位 *@covers/VendorName/SystemName/TestableClass */ 最终类TestableClassTest扩展了TestCase{/**…*/} } 当我们运行这些测试时,TestableClass得到了正确的覆盖,但是我们还想看看Testab

我们使用phpunit像这样对类进行单元测试

名称空间VendorName/SystemName{
最终类可测试类{/**…*/}
}
名称空间VendorName/SystemName/Tests{
/**
*@集团单位
*@covers/VendorName/SystemName/TestableClass
*/
最终类TestableClassTest扩展了TestCase{/**…*/}
}
当我们运行这些测试时,
TestableClass
得到了正确的覆盖,但是我们还想看看TestableClassTest中的每一行代码是否都被执行了,就像我们有时处理死代码一样

/**
*@expectedException/InvalidArgumentException
*/
公共函数testSomeMethodThrowsException():void
{
//做些安排
//调用被测试的方法
$testable->someMethod();
//做一些调用后断言
self::assertBar($baz);
self::assertFoo($baz);
//上面的行实际上是死代码
//若测试正常并抛出异常
}
所以我们也不想为我们的测试获取覆盖率统计数据

简单的方法是向每个测试类添加@covers
/VendorName/SystemName/Tests/TestableClassTest
,但这需要大量的手工工作


是否有一种正确的方法可以自动获取测试用例覆盖率(可能是listener或config或其他phpunit黑客)

从您的问题来看,当您从测试用例中grep名称空间和最终类名时,您可以轻松生成@covers类名并将其插入注释中。在Phpunit XML中强制执行
forceCoversAnnotation=true
,如果处理成功,那么事后很容易检查。我们总是为测试类提供单个
@covers
注释,因此检查不会显示任何其他内容。是的,我认为我们可以使用某种“代码修复器”工具以编程方式完成这项工作,但在这种情况下,我们应该额外维护这些注释是的,将它们引入,一旦完成,维护起来就更容易了。也许你在Rector或PHP CS Fixer项目中发现了一些东西。从你的问题来看,当你从测试用例中grep名称空间和最终的类名时,你可以很容易地生成@covers类名,并将其插入注释中。在Phpunit XML中强制执行
forceCoversAnnotation=true
,如果处理成功,那么事后很容易检查。我们总是为测试类提供单个
@covers
注释,因此检查不会显示任何其他内容。是的,我认为我们可以使用某种“代码修复器”工具以编程方式完成这项工作,但在这种情况下,我们应该额外维护这些注释是的,将它们引入,一旦完成,维护起来就更容易了。也许您在Rector或phpcs Fixer项目中找到了一些东西。