Запуск тестов PHPUnit из командной строки
Запуск исполнителя тестов PHPUnit из командной строки выполняется с помощью команды phpunit. Следующий код демонстрирует, как запустить тесты с помощью исполнителя тестов PHPUnit из командной строки:
$ phpunit ArrayTest PHPUnit 9.5.0 by Sebastian Bergmann and contributors. .. Time: 0 seconds OK (2 tests, 2 assertions)
При вызове, как показано выше, исполнитель тестов PHPUnit из командной строки ищет файл ArrayTest.php в текущем рабочем каталоге, загружает его и ожидает найти класс теста ArrayTest. Затем он выполнит тесты этого класса.
Для каждого проведённого запуска теста инструмент PHPUnit выводит один символ, отображающий ход выполнения:
.
Выводится при успешном выполнении теста.
F
Выводится, когда в методе теста происходит ошибка проверки (assertion) при его выполнении.
E
Выводится, когда при выполнении метода теста возникает ошибка.
R
Выводится, когда тест помечен как рискованный (см. Рискованные тесты).
S
Выводится, когда тест пропущен (см. Неполные и пропущенные тесты).
I
Выводится, когда тест помечен как неполный или ещё не реализованный (см. Неполные и пропущенные тесты).
PHPUnit различает ошибки (failures) и недоразумения (errors). Ошибка — это нарушение утверждения PHPUnit, например, вызов assertSame(), который завершается неудачей. Недоразумение — это непредвиденное исключение или ошибка PHP. Иногда это различие полезно, так как ошибки легче исправить, чем ошибки утверждений. Если у вас большой список проблем, лучше сначала устранить ошибки и посмотреть, остаются ли какие-либо ошибки, после исправления всех ошибок.
Параметры командной строки
Рассмотрим параметры командной строки для запуска тестов в следующем коде:
$ phpunit --help
PHPUnit 9.5.0 by Sebastian Bergmann and contributors.
Usage:
phpunit [options] UnitTest.php
phpunit [options] <directory>
Code Coverage Options:
--coverage-clover <file> Generate code coverage report in Clover XML format
--coverage-crap4j <file> Generate code coverage report in Crap4J XML format
--coverage-html <dir> Generate code coverage report in HTML format
--coverage-php <file> Export PHP_CodeCoverage object to file
--coverage-text <file> Generate code coverage report in text format [default: standard output]
--coverage-xml <dir> Generate code coverage report in PHPUnit XML format
--coverage-cache <dir> Cache static analysis results
--warm-coverage-cache Warm static analysis cache
--coverage-filter <dir> Include <dir> in code coverage analysis
--path-coverage Perform path coverage analysis
--disable-coverage-ignore Disable annotations for ignoring code coverage
--no-coverage Ignore code coverage configuration
Logging Options:
--log-junit <file> Log test execution in JUnit XML format to file
--log-teamcity <file> Log test execution in TeamCity format to file
--testdox-html <file> Write agile documentation in HTML format to file
--testdox-text <file> Write agile documentation in Text format to file
--testdox-xml <file> Write agile documentation in XML format to file
--reverse-list Print defects in reverse order
--no-logging Ignore logging configuration
Test Selection Options:
--filter <pattern> Filter which tests to run
--testsuite <name> Filter which testsuite to run
--group <name> Only runs tests from the specified group(s)
--exclude-group <name> Exclude tests from the specified group(s)
--list-groups List available test groups
--list-suites List available test suites
--list-tests List available tests
--list-tests-xml <file> List available tests in XML format
--test-suffix <suffixes> Only search for test in files with specified suffix(es). Default: Test.php,.phpt
Test Execution Options:
--dont-report-useless-tests Do not report tests that do not test anything
--strict-coverage Be strict about @covers annotation usage
--strict-global-state Be strict about changes to global state
--disallow-test-output Be strict about output during tests
--disallow-resource-usage Be strict about resource usage during small tests
--enforce-time-limit Enforce time limit based on test size
--default-time-limit <sec> Timeout in seconds for tests without @small, @medium or @large
--disallow-todo-tests Disallow @todo-annotated tests
--process-isolation Run each test in a separate PHP process
--globals-backup Backup and restore $GLOBALS for each test
--static-backup Backup and restore static attributes for each test
--colors <flag> Use colors in output ("never", "auto" or "always")
--columns <n> Number of columns to use for progress output
--columns max Use maximum number of columns for progress output
--stderr Write to STDERR instead of STDOUT
--stop-on-defect Stop execution upon first not-passed test
--stop-on-error Stop execution upon first error
--stop-on-failure Stop execution upon first error or failure
--stop-on-warning Stop execution upon first warning
--stop-on-risky Stop execution upon first risky test
--stop-on-skipped Stop execution upon first skipped test
--stop-on-incomplete Stop execution upon first incomplete test
--fail-on-incomplete Treat incomplete tests as failures
--fail-on-risky Treat risky tests as failures
--fail-on-skipped Treat skipped tests as failures
--fail-on-warning Treat tests with warnings as failures
-v|--verbose Output more verbose information
--debug Display debugging information
--repeat <times> Runs the test(s) repeatedly
--teamcity Report test execution progress in TeamCity format
--testdox Report test execution progress in TestDox format
--testdox-group Only include tests from the specified group(s)
--testdox-exclude-group Exclude tests from the specified group(s)
--no-interaction Disable TestDox progress animation
--printer <printer> TestListener implementation to use
--order-by <order> Run tests in order: default|defects|duration|no-depends|random|reverse|size
--random-order-seed <N> Use a specific random seed <N> for random order
--cache-result Write test results to cache file
--do-not-cache-result Do not write test results to cache file
Configuration Options:
--prepend <file> A PHP script that is included as early as possible
--bootstrap <file> A PHP script that is included before the tests run
-c|--configuration <file> Read configuration from XML file
--no-configuration Ignore default configuration file (phpunit.xml)
--extensions <extensions> A comma separated list of PHPUnit extensions to load
--no-extensions Do not load PHPUnit extensions
--include-path <path(s)> Prepend PHP's include_path with given path(s)
-d <key[=value]> Sets a php.ini value
--cache-result-file <file> Specify result cache path and filename
--generate-configuration Generate configuration file with suggested settings
--migrate-configuration Migrate configuration file to current format
Miscellaneous Options:
-h|--help Prints this usage information
--version Prints the version and exits
--atleast-version <min> Checks that version is greater than min and exits
--check-version Check whether PHPUnit is the latest version
phpunit UnitTest
Запускает тесты, предоставляемые классом
UnitTest. Ожидается, что этот класс объявлен в файлеUnitTest.php.
UnitTestдолжен быть либо классом, наследующим отPHPUnit\Framework\TestCase, либо классом, предоставляющим методpublic static suite(), который возвращает объектPHPUnit\Framework\Test, например, экземпляр классаPHPUnit\Framework\TestSuite.
phpunit UnitTest UnitTest.php
Запускает тесты, предоставляемые классомUnitTest. Ожидается, что этот класс объявлен в указанном файле исходного кода.
--coverage-clover
Генерирует файл журнала в формате XML с информацией о покрытии кода для выполненных тестов. Для получения более подробной информации см. Анализ покрытия кода.
--coverage-crap4j
Генерирует отчет о покрытии кода в формате Crap4j. Для получения более подробной информации см. Анализ покрытия кода.
--coverage-html
Генерирует отчет о покрытии кода в формате HTML. Для получения более подробной информации см. Анализ покрытия кода.
--coverage-php
Генерирует сериализованный объект PHP_CodeCoverage с информацией о покрытии кода.
--coverage-text
Генерирует файл журнала или вывод в командной строке в удобочитаемом формате с информацией о покрытии кода для выполненных тестов.
--log-junit
Генерирует файл журнала в формате JUnit XML для выполненных тестов.
--testdox-html и --testdox-text
Генерирует документацию в формате HTML или простого текста для выполненных тестов (см. TestDox).
--filter
Запускает только тесты, имя которых соответствует заданному шаблону регулярного выражения. Если шаблон не заключен в разделители, PHPUnit заключит шаблон в разделители
/.Имена тестов для сопоставления будут в одном из следующих форматов:
TestNamespace\TestCaseClass::testMethodПо умолчанию используется формат имени теста, эквивалентный использованию магической константы__METHOD__внутри метода теста.
TestNamespace\TestCaseClass::testMethod with data set #0Когда тест имеет поставщик данных, каждая итерация данных получает текущий индекс, добавленный в конец имени теста по умолчанию.
TestNamespace\TestCaseClass::testMethod with data set "my named data"Когда тест имеет поставщик данных, использующий именованные наборы, каждая итерация данных получает текущее имя, добавленное в конец имени теста по умолчанию. Пример именованных наборов данных см. в Примере 3.1.
Пример 3.1 Именованные наборы данных<?php use PHPUnit\Framework\TestCase; namespace TestNamespace; class TestCaseClass extends TestCase { /** * @dataProvider provider */ public function testMethod($data) { $this->assertTrue($data); } public function provider() { return [ 'my named data' => [true], 'my data' => [true] ]; } }
/path/to/my/test.phptИмя теста для теста PHPT — это путь к файлу в файловой системе.Примеры допустимых шаблонов фильтров см. в Примере 3.2.
Пример 3.2 Примеры шаблонов фильтров--filter 'TestNamespace\\TestCaseClass::testMethod' --filter 'TestNamespace\\TestCaseClass' --filter TestNamespace --filter TestCaseClase --filter testMethod --filter '/::testMethod .*"my named data"/' --filter '/::testMethod .*#5$/' --filter '/::testMethod .*#(5|6|7)$/'Дополнительные сокращения для сопоставления поставщиков данных см. в Примере 3.3.
Пример 3.3 Сокращения для фильтров--filter 'testMethod#2' --filter 'testMethod#2-4' --filter '#2' --filter '#2-4' --filter 'testMethod@my named data' --filter 'testMethod@my.*data' --filter '@my named data' --filter '@my.*data'
--testsuite
Запускает только набор тестов, имя которого соответствует указанному шаблону.
--group
Запускает только тесты из указанной группы или групп. Тест можно пометить как принадлежащий к группе, используя аннотацию
@group.Аннотации
@authorи@ticketявляются псевдонимами для@group, позволяя фильтровать тесты по авторам или идентификаторам заявок соответственно.
--exclude-group
Исключает тесты из указанной группы или групп. Тест можно пометить как принадлежащий к группе, используя аннотацию@group.
--list-groups
Отображает доступные группы тестов.
--test-suffix
Искать только файлы тестов с указанным(и) суффиксом(ами).
--dont-report-useless-tests
Не отображать тесты, которые ничего не тестируют. Подробности см. в Рискованные тесты.
--strict-coverage
Строго следовать за принципом непреднамеренного покрытия кода. Подробности см. в Рискованные тесты.
--strict-global-state
Строго следовать за принципом манипуляции глобальным состоянием. Подробности см. в Рискованные тесты.
--disallow-test-output
Строго следовать за принципом вывода во время тестов. Подробности см. в Рискованные тесты.
--disallow-todo-tests
Не выполняет тесты, содержащие аннотацию@todoв блоке документации.
--enforce-time-limit
Применяет лимит времени, основанный на размере теста. Подробности см. в Рискованные тесты.
--process-isolation
Выполняет каждый тест в отдельном процессе PHP.
--no-globals-backup
Не сохраняет и не восстанавливает $GLOBALS. Дополнительные сведения см. в Глобальное состояние.
--static-backup
Сохраняет и восстанавливает статические атрибуты классов, определённых пользователем. Подробности см. в Глобальное состояние.
--colors
Использует цвета в выводе. В Windows используйте ANSICON или ConEmu.
Для этого параметра возможны три значения:
never: цвета в выводе никогда не отображаются. Это значение по умолчанию, если параметр--colorsне используется.auto: цвета отображаются в выводе, если текущий терминал поддерживает цвета, либо если вывод перенаправлен в командную строку или файл.always: цвета всегда отображаются в выводе, даже если текущий терминал не поддерживает цвета или вывод перенаправлен.Если параметр
--colorsиспользуется без значения, выбирается значениеauto.
--columns
Определяет количество столбцов для вывода прогресса. Еслиmaxопределено, количество столбцов будет максимальным для текущего терминала.
--stderr
Необязательно выводит вSTDERRвместоSTDOUT.
--stop-on-error
Останавливает выполнение при первой ошибке.
--stop-on-failure
Останавливает выполнение при первой ошибке или провале.
--stop-on-risky
Останавливает выполнение при первом рискованном тесте.
--stop-on-skipped
Останавливает выполнение при первом пропущенном тесте.
--stop-on-incomplete
Останавливает выполнение при первом неполном тесте.
--verbose
Выводит более подробную информацию, например, имена тестов, которые были неполными или пропущенными.
--debug
Выводит отладочную информацию, такую как имя теста при его запуске.
--loader
Указывает реализацию
PHPUnit\Runner\TestSuiteLoaderдля использования.Стандартный загрузчик набора тестов будет искать исходный файл в текущей рабочей директории и в каждой директории, указанной в директиве конфигурации
include_pathPHP. Имя класса, например,Project_Package_Class, сопоставляется с именем файла исходного кодаProject/Package/Class.php.
--repeat
Повторяет запуск указанного(ых) теста(ов) заданное количество раз.
--testdox
Отчет о ходе выполнения тестов в формате TestDox (см. TestDox).
--printer
Указывает используемый принтер результатов. Класс-принтер должен расширятьPHPUnit\Util\Printerи реализовывать интерфейсPHPUnit\Framework\TestListener.
--bootstrap
Файл PHP «bootstrap», который выполняется перед тестами.
--configuration, -c
Считывает конфигурацию из XML-файла. Дополнительные сведения см. в Файле конфигурации XML.
Если
phpunit.xmlилиphpunit.xml.dist(в указанном порядке) существуют в текущей рабочей директории и--configurationне используется, конфигурация будет автоматически считана из этого файла.Если указана директория и если
phpunit.xmlилиphpunit.xml.dist(в указанном порядке) существуют в этой директории, конфигурация будет автоматически считана из этого файла.
--no-configuration
Игнорироватьphpunit.xmlиphpunit.xml.distиз текущей рабочей директории.
--include-path
Добавлять путь(и) кinclude_pathPHP.
-d
Устанавливает значение заданного параметра конфигурации PHP.
Примечание
Обратите внимание, что параметры могут быть помещены после аргумента(ов).
TestDox
Функциональность TestDox PHPUnit анализирует класс тестов и все имена методов тестов и преобразует их из именования в стиле camel case (или snake_case) PHP в предложения: testBalanceIsInitiallyZero() (или test_balance_is_initially_zero() становится «Баланс изначально равен нулю». Если есть несколько методов тестов, имена которых отличаются только суффиксом из одного или нескольких цифр, например, testBalanceCannotBecomeNegative() и testBalanceCannotBecomeNegative2(), предложение «Баланс не может стать отрицательным» будет отображаться только один раз, предполагая, что все эти тесты пройдены.
Давайте рассмотрим сгенерированную гибкую документацию для класса %%%CODE_BLOCK_107%%:
$ phpunit --testdox BankAccountTest.php PHPUnit 9.5.0 by Sebastian Bergmann and contributors. BankAccount ✔ Balance is initially zero ✔ Balance cannot become negative
В качестве альтернативы, гибкая документация может быть сгенерирована в формате HTML или простого текста и записана в файл с помощью аргументов --testdox-html и --testdox-text.
Гибкая документация может использоваться для документирования предположений, которые вы делаете о внешних пакетах, используемых в вашем проекте. При использовании внешнего пакета вы подвергаетесь риску, что пакет не будет вести себя так, как вы ожидаете, и что будущие версии пакета изменятся тонким образом, что сломает ваш код, о чем вы не будете знать. Вы можете справиться с этими рисками, написав тест каждый раз, когда делаете предположение. Если ваш тест пройден, ваше предположение верно. Если вы документируете все свои предположения с помощью тестов, будущие выпуски внешнего пакета не будут поводом для беспокойства: если тесты пройдены, ваша система должна продолжать работать.
© 2005–2020 Sebastian Bergmann
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://phpunit.readthedocs.io/en/9.5/textui.html