Я собираю данные о покрытии кода для моих модульных тестов PHP; некоторые — модульные тесты, а некоторые — интеграционные тесты, проверяющие, что все (классы и конфигурации) подключены правильно.
Я только хочу собирать информацию о покрытии кода во время выполнения модульных тестов, так как именно модульные тесты должны показывать, чтобы охватить все строки в целевом классе (ах) (в идеале, используя @covers
Аннотации). Интеграционные тесты не должны показывать, что они вообще что-то покрывают, но позиция phpunit по умолчанию выглядит так: если у нее нет @covers
аннотации, то она должна охватывать каждую строку кода, которая прямо или косвенно вызывается каждым методом тестирования.
Обратите внимание, что с помощью <whitelist>
в phpunit.xml
не поможет мне, потому что некоторые файлы могут быть затронуты обоими наборами тестов — и я хочу записать покрытие кода, исходящее из одного, исключая другой.
Я думал о нескольких способах, которыми это возможно, но ни один из них не кажется мне «чистым»:
@covers
объявление в тестовый класс ‘docblockЭто работает, но, как указано, добавив манекен
@covers
лайк:/** @covers \stdClass */
чувствует себя так, так грязно.
codeCoverageIgnoreStart
/End
аннотации вокруг тела каждого метода испытаний (я не знаю, работает ли это)Подобно тому, как показано ниже, это, по-видимому, исключает только обернутые строки кода, а не любые строки кода, вызываемые после этого.
codeCoverageIgnore
аннотация к тестовому классу (я подозреваю, что это не сработает из-за простого исключения кода в классе из сбора покрытия, но возобновления сбора для любого зависимого кода)Протестировано это, как и предполагалось, это имеет семантику, что ни одна строка в тестовом классе не должна рассматриваться как покрытая
Есть ли более чистый способ сделать это, чем любая из вышеперечисленных возможностей?
Самый чистый метод ощущений, который я нашел до сих пор, — это вариант первого подхода, описанного выше: ссылаться на класс в @covers
аннотация:
<?php
namespace FooTestSuite;
/** @covers \FooTestSuite\BarTest */
class BarTest extends \PHPUnit_Framework_TestCase {
/* ... */
}
Других решений пока нет …