Рассчитать покрытие кода на тестовых классах phpunit - PullRequest
1 голос
/ 28 мая 2019

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

...