Как я могу исключить покрытие кода для определенных тестов

Я собираю данные о покрытии кода для моих модульных тестов PHP; некоторые — модульные тесты, а некоторые — интеграционные тесты, проверяющие, что все (классы и конфигурации) подключены правильно.

Я только хочу собирать информацию о покрытии кода во время выполнения модульных тестов, так как именно модульные тесты должны показывать, чтобы охватить все строки в целевом классе (ах) (в идеале, используя @covers Аннотации). Интеграционные тесты не должны показывать, что они вообще что-то покрывают, но позиция phpunit по умолчанию выглядит так: если у нее нет @covers аннотации, то она должна охватывать каждую строку кода, которая прямо или косвенно вызывается каждым методом тестирования.

Обратите внимание, что с помощью <whitelist> в phpunit.xml не поможет мне, потому что некоторые файлы могут быть затронуты обоими наборами тестов — и я хочу записать покрытие кода, исходящее из одного, исключая другой.

Я думал о нескольких способах, которыми это возможно, но ни один из них не кажется мне «чистым»:

  • Добавление ложного @covers объявление в тестовый класс ‘docblock

    Это работает, но, как указано, добавив манекен @covers лайк: /** @covers \stdClass */ чувствует себя так, так грязно.

  • Добавление codeCoverageIgnoreStart/End аннотации вокруг тела каждого метода испытаний (я не знаю, работает ли это)

    Подобно тому, как показано ниже, это, по-видимому, исключает только обернутые строки кода, а не любые строки кода, вызываемые после этого.

  • Добавление codeCoverageIgnore аннотация к тестовому классу (я подозреваю, что это не сработает из-за простого исключения кода в классе из сбора покрытия, но возобновления сбора для любого зависимого кода)

    Протестировано это, как и предполагалось, это имеет семантику, что ни одна строка в тестовом классе не должна рассматриваться как покрытая

  • Разделение их на отдельные наборы, для которых покрытие кода собирается для одного, а не другого. (В идеале все тесты должны быть выполнены за один прогон)

Есть ли более чистый способ сделать это, чем любая из вышеперечисленных возможностей?

1

Решение

Самый чистый метод ощущений, который я нашел до сих пор, — это вариант первого подхода, описанного выше: ссылаться на класс в @covers аннотация:

<?php

namespace FooTestSuite;

/** @covers \FooTestSuite\BarTest */
class BarTest extends \PHPUnit_Framework_TestCase {

/* ... */

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]