Как запустить одиночный метод тестирования с помощью 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.
Теперь, когда вы поместите курсор на любую функцию и затем используете привязку клавиш, он автоматически запустит этот единственный тест.
Если вам нужно запустить весь класс, поместите курсор поверх класса и используйте привязку клавиш.
Если у вас есть какие-либо другие вещи, всегда настраивайте с помощью терминала
Удачного кодирования!