Как исключить файл из набора тестов PHPUnit в конфигурации XML? - PullRequest
32 голосов
/ 29 апреля 2010

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

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

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

Ответы [ 6 ]

35 голосов
/ 04 мая 2010

Есть несколько способов не запускать конкретный тест - поместить его в черный список, чтобы он никогда не запускался, может быть не лучшим образом - так как его изменение означает редактирование черного списка, и вы часто в конечном итоге будете вводить и выводить егоконтроля версий.

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

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

$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)
{
}

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

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

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

30 голосов
/ 24 мая 2015

Для исключения имени файла 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>
    ...
7 голосов
/ 18 марта 2011

С этим файлом конфигурации 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 голосов
/ 26 марта 2013

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

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

1 голос
/ 22 февраля 2019

Для 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>
0 голосов
/ 29 апреля 2010

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

<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

...