Как исключить файл из набора 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, которая ничего об этом не упоминает. Иначе, эта конфигурация работает отлично.
Ответы
Ответ 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