Подтвердить что ты не робот

Как исключить файл из набора PHPUnit для тестирования в xml config?

У меня есть следующий очень простой XML файл для PHPUnit:

<phpunit bootstrap="/_tests/TestAutoload.php">
    <testsuites>
        <testsuite name="Unit Tests">
            <directory suffix=".php">_tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

Как исключить определенный файл из этого каталога из набора тестов? Я пробовал <exclude> и <blacklist>, но, похоже, это не работает в этом контексте. Также не удалось найти другую документацию, кроме phpunit.de, которая ничего об этом не упоминает. Иначе, эта конфигурация работает отлично.

4b9b3361

Ответ 1

Существует несколько способов не запускать конкретный тест: включение его в черный список, чтобы он никогда не запускался, может быть не так, поскольку изменение означает редактирование черного списка, и вы часто будете в конечном итоге подпрыгивать от него контроля версий.

Есть несколько других способов, которые могут быть более подходящими:

Если тест еще не готов к запуску:

$this->markTestIncomplete('This test has not been implemented yet.');

Если есть причина, по которой она не должна быть запущена, пропустите ее:

if (!extension_loaded('mysqli')) {
    $this->markTestSkipped('The MySQLi extension is not available.');
}

Вы также можете поместить это в функцию setUp(), поэтому он пропустит все тесты в тестовом классе.

Вы можете выполнить тест, зависящий от предыдущего:

public function testEmpty()
{
    $stack = array();
    $this->assertTrue(empty($stack));
    return $stack;   // also sends this variable to any following tests - if this worked
}
/**
 * only runs if testEmpty() passed
 *
 * @depends testEmpty
 */
public function testPush(array $stack)
{
}

Аннотации @group -name - один из лучших способов специально остановить или запустить одну группу тестов

/**
 * @group database
 * @group remoteTasks
 */
public function testSomething()
{
}

testSomething() теперь находится в двух группах, и если он добавлен в командной строке (или в файле config.xml) --exclude-group. он не будет запущен. Аналогичным образом, вы можете запускать только те тесты, которые принадлежат к определенной группе - например, названы в честь функции или отчета об ошибке.

Ответ 2

Чтобы исключить имя файла TestCase.php.

добавьте это в свой phpunit.xml

<testsuites>
    <testsuite name="BLABLA">
        <directory suffix=".php">./tests</directory>
        <exclude>./tests/TestCase.php</exclude>
    </testsuite>
</testsuites>

Вот дополнительный отрывок из тестового пакета реального времени. Я могу подтвердить, что он работает с:

...
    <testsuites>
        <testsuite name="n98-magerun-tests">
            <directory>./tests</directory>
            <exclude>tests/N98/Magento/Command/Installer/UninstallCommandTest.php</exclude>
        </testsuite>
    ...

Ответ 3

В этом файле конфигурации PHPUnit я сделал очень хороший опыт.

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    colors="true"
    processIsolation="true"
    stopOnFailure="true"
    syntaxCheck="false"
    backupGlobals="false"
    bootstrap="test-bootstrap.php">
    <testsuites>
        <testsuite name="php-dba-cache">
          <directory suffix="Test.php">tests</directory>
        </testsuite>
    </testsuites>
    <logging>
        <log type="coverage-html"
             target="build/coverage"
             charset="UTF-8"
             yui="true"
             highlight="true"
             lowUpperBound="35"
             highLowerBound="70"/>
   </logging>
    <filter>
        <whitelist addUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
            <exclude>
             <file>test-bootstrap.php</file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

https://github.com/gjerokrsteski/php-dba-cache

Ответ 4

документация phpunit немного минималистична, когда дело доходит до исключения в testuite. По-видимому, можно исключить только целые каталоги, но не отдельные файлы. Я был бы очень рад оказаться ошибочным. Обходной путь, по-видимому, использует функцию @group как опубликованную выше Алистер Бульман.

Это какая-то боль, требующая пометить каждый тест в тех наборах тестов, которые я хотел бы сохранить.

Ответ 5

Для Phpunit 6.5 exclude находится под whitelist

<filter>
    <whitelist>
        <directory suffix=".php">src</directory>
        <exclude>
            <directory>src/Migrations</directory>
            <file>src/kernel.php</file>
        </exclude>
    </whitelist>
</filter>

Ответ 6

Наряду с вышеприведенными решениями вы могли бы использовать больше архитектурно-ориентированного рабочего процесса тестирования, где вы управляете своими тестами, каталогами и наборами тестов из phpunit.xml следующим образом:

  • Сгруппируйте тест по каталогам (например, Unit, Feature);
  • Сгруппируйте свои каталоги в тестовых наборах с элементом <testsuite> ;
  • Создайте набор тестов All, который объединяет все стандартные тесты, которые вы будете выполнять как полный набор тестов, и назначьте его с помощью клавиши defaultTestSuite="All" в элементе <phpunit>.
  • Создайте специальный набор тестов Tinker с тестами, которые вы могли бы использовать для повозок, хранения примеров тестов и т.д., Которые вы бы исключили из обычного рабочего процесса тестирования. Не включайте его в набор тестов All.

Таким образом, вы сможете:

  • используйте команду CLI phpunit, чтобы всегда запускать тесты по умолчанию All.
  • используйте CLI для фильтрации по комплекту тестов, файлу тестов или одному уровню тестирования для любого из ваших наборов тестов, например:
    • phpunit --testsuite SuiteOne,
    • phpunit --filter SomeTest или
    • phpunit --filter SomeTest::test_some_test_method
    • объединить --testsuite с --filter аргументами

Соедините этот рабочий процесс с возможностью запуска текущего теста или тестового файла из вашей среды IDE (для Sublime Text есть плагины Mac и Linux/Windows), и вы будете полностью оснащены мгновенно выбрал, какой тест выполнить.

Ответ 7

Эй, убедитесь, что вы помещаете свои исключения в белый список. Пример:

<phpunit>
    <filter>
        <blacklist>
            <directory suffix=".php">/not/even/looked/at/</directory>
        </blacklist>
        <whitelist>
            <directory suffix=".php">/path/to/test/dir/</directory>
            <exclude>
                <file suffix=".php">/path/to/fileToExclude.php</file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

http://www.phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.blacklist-whitelist