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

Я пытаюсь запустить один тестовый метод с именем testSaveAndDrop в файле 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. Как выбрать только ОДИН метод?

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

Ответ 1

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

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php

Для более новых версий phpunit это просто:

phpunit --filter methodName path/to/file.php

Ответ 2

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

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

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

phpunit --group failing

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

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

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

Ответ 3

Здесь более общий ответ:

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

phpunit --filter {TestMethodName}

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

phpunit --filter {TestMethodName} {FilePath}

Пример:

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

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

Ответ 4

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

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

Ответ 5

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

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

Без = и '

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

Ответ 6

для запуска теста phpunit в laravel многими способами..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

для теста одного класса:

vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

для теста одиночным методом:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

для запуска тестов из всех классов в пространстве имен:

vendor/bin/phpunit --filter 'Tests\\Feature'

для более подробного теста запуска см. больше

Ответ 7

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

Run Focused Test Method menu

Ответ 8

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

phpunit tests/{testfilename}

Например:

phpunit tests/StackoverflowTest.php

Если вы хотите запускать отдельные тестовые случаи в Laravel 5.5, попробуйте

vendor/bin/phpunit tests/Feature/{testfilename} 

vendor/bin/phpunit tests/Unit/{testfilename} 

Например:

vendor/bin/phpunit tests/Feature/ContactpageTest.php 

vendor/bin/phpunit tests/Unit/ContactpageTest.php

Ответ 9

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

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

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

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

Ответ 10

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

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

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

Ответ 11

Вы должны использовать --filter для запуска одного метода тестирования php phpunit --filter "/::testMethod(.*)?$/" ClassTest ClassTest.php

Приведенный выше фильтр будет запускать testMethod в одиночку.

Ответ 12

Я опаздываю на вечеринку, хотя. Но как личное я ненавижу писать всю строку.

Вместо этого я использую следующие ярлыки в файле .bash_profile, чтобы получить исходный файл .bash_profile после добавления нового псевдонима, иначе он не будет работать.

alias pa="php artisan"
alias pu="vendor/bin/phpunit" 
alias puf="vendor/bin/phpunit --filter"

Использование:

puf function_name

puf filename

Если вы используете код Visual Studio, вы можете использовать следующий пакет, чтобы сделать ваши тесты быстрыми.

Package Name: Better PHPUnit
Link: https://marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit

Затем вы можете установить связывание клавиш в настройках. Я использую привязку Command + T в своем MAC.

Теперь, когда вы поместите курсор на любую функцию и затем используете привязку клавиш, он автоматически запустит этот единственный тест.

Если вам нужно запустить весь класс, поместите курсор поверх класса и используйте привязку клавиш.

Если у вас есть какие-либо другие вещи, всегда настраивайте с помощью терминала

Удачного кодирования!