Как запустить одиночный метод тестирования с помощью phpunit?

Я testSaveAndDrop запустить один метод тестирования с именем testSaveAndDrop в escalation/EscalationGroupTest.php файлов escalation/EscalationGroupTest.php с помощью phpunit . Я попробовал следующие комбинации:

 phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop 

В каждом случае выполняется весь тестовый метод в escalation/EscalationGroupTest.php файла escalation/EscalationGroupTest.php . Как выбрать только ОДИН метод?

Имя класса – EscalationGroupTest а версия phpunit – 3.2.8.

Следующая команда запускает тест по одному методу:

 phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php phpunit --filter methodName ClassName path/to/file.php 

Я предпочитаю маркировать тест в аннотации как

 /** * @group failing * Tests the api edit form */ public function testEditAction() 

Затем запустите его с помощью

 phpunit --group failing 

Не нужно указывать полный путь в командной строке, но вы должны помнить об удалении этого параметра перед фиксацией, а не загромождать код.

Вы можете также указать несколько групп для одного теста

 /** * @group failing * @group bug2204 */ public function testSomethingElse() { } 

Вот более общий ответ:

Если вы уверены, что имя метода уникально, вы можете фильтровать только по имени метода (это работает для меня)

 phpunit --filter {TestMethodName} 

Однако более безопасно указывать путь / ссылку на файл

 phpunit --filter {TestMethodName} {FilePath} 

Пример:

 phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php 

Быстрое замечание: я заметил, что если у меня есть функция с именем testSave а другая функция с именем testSaveAndDrop с помощью команды phpunit --filter testSave также запускает testSaveAndDrop и любую другую функцию, которая начинается с testSave* , это странно!

Следующая команда будет выполнять точно тест testSaveAndDrop .

 phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php 

Итак, что-то вроде этого

 phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

Без = и с '

https://phpunit.de/manual/3.7/en/textui.html

Если вы находитесь в netbeans, вы можете щелкнуть правой кнопкой мыши в методе тестирования и нажать «Запустить сконфигурированный метод тестирования».

Запустить меню «Сконструированное тестовое устройство»

Причина, по которой все ваши тесты запущены, заключается в том, что у вас есть флаг --filter после имени файла. PHPUnit не читает параметры вообще, и поэтому запускает все тестовые примеры.

На экране справки:

  Usage: phpunit [options] UnitTest [UnitTest.php] phpunit [options] <directory> 

Поэтому переместите аргумент --filter перед тестовым файлом, который вы хотите, как указано в ответах @Alex и @Ferid Mövsümov. И у вас должен быть только те тесты, которые вы хотите запустить.

Если вы используете файл конфигурации XML, вы можете добавить следующее в тег phpunit :

 <groups> <include> <group>nameToInclude</group> </include> <exclude> <group>nameToExclude</group> </exclude> </groups> 

См. https://phpunit.de/manual/current/en/appendixes.configuration.html.