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

时间:2019-05-28 10:39:01

标签: php phpunit code-coverage

我们正在使用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)

0 个答案:

没有答案