Мы используем 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)