Организация тестов
Одна из целей PHPUnit — возможность комбинирования тестов: мы хотим иметь возможность запускать любое количество или комбинацию тестов вместе, например, все тесты для всего проекта, или тесты для всех классов компонента, являющегося частью проекта, или просто тесты для одного класса.
PHPUnit поддерживает различные способы организации тестов и объединения их в набор тестов. В этой главе показаны наиболее часто используемые подходы.
Создание набора тестов с использованием файловой системы
Вероятно, самый простой способ создать набор тестов — хранить все файлы тестовых случаев в каталоге тестов. PHPUnit может автоматически обнаруживать и запускать тесты, рекурсивно обходя каталог тестов.
Давайте рассмотрим набор тестов библиотеки sebastianbergmann/money. Посмотрев структуру каталогов этого проекта, мы видим, что классы тестовых случаев в каталоге tests отражают структуру пакета и классов Тестируемого объекта (SUT) в каталоге src.
src tests
`-- Currency.php `-- CurrencyTest.php
`-- IntlFormatter.php `-- IntlFormatterTest.php
`-- Money.php `-- MoneyTest.php
`-- autoload.php
Для запуска всех тестов библиотеки необходимо указать исполнителю тестов PHPUnit командной строки каталог тестов:
$ phpunit --bootstrap src/autoload.php tests PHPUnit 9.5.0 by Sebastian Bergmann and contributors. ................................. Time: 636 ms, Memory: 3.50Mb OK (33 tests, 52 assertions)
Примечание
Если вы укажете исполнителю тестов PHPUnit командной строки каталог, он будет искать файлы *Test.php.
Для запуска только тестов, объявленных в классе тестового случая CurrencyTest в tests/CurrencyTest.php, можно использовать следующую команду:
$ phpunit --bootstrap src/autoload.php tests/CurrencyTest.php PHPUnit 9.5.0 by Sebastian Bergmann and contributors. ........ Time: 280 ms, Memory: 2.75Mb OK (8 tests, 8 assertions)
Для более точного управления запуском тестов можно использовать опцию --filter:
$ phpunit --bootstrap src/autoload.php --filter testObjectCanBeConstructedForValidConstructorArgument tests PHPUnit 9.5.0 by Sebastian Bergmann and contributors. .. Time: 167 ms, Memory: 3.00Mb OK (2 test, 2 assertions)
Примечание
Недостатком этого подхода является отсутствие контроля над порядком запуска тестов. Это может привести к проблемам, связанным с зависимостями тестов, см. Зависимости тестов. В следующей секции вы увидите, как можно сделать порядок выполнения тестов явным, используя файл конфигурации XML.
Создание набора тестов с помощью XML-конфигурации
Файл конфигурации XML PHPUnit (Файл XML-конфигурации) также можно использовать для создания набора тестов. Пример 5.1 показывает минимальный файл phpunit.xml, который добавит все *Test классы, найденные в *Test.php файлах, при рекурсивном прохождении каталога tests.
<phpunit bootstrap="src/autoload.php">
<testsuites>
<testsuite name="money">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Для запуска набора тестов используйте опцию --testsuite:
$ phpunit --bootstrap src/autoload.php --testsuite money PHPUnit 9.5.0 by Sebastian Bergmann and contributors. .. Time: 167 ms, Memory: 3.00Mb OK (2 test, 2 assertions)
Если phpunit.xml или phpunit.xml.dist (в указанном порядке) существуют в текущей рабочей директории и --configuration не используется, конфигурация будет автоматически считываться из этого файла.
Порядок выполнения тестов можно сделать явным:
<phpunit bootstrap="src/autoload.php">
<testsuites>
<testsuite name="money">
<file>tests/IntlFormatterTest.php</file>
<file>tests/MoneyTest.php</file>
<file>tests/CurrencyTest.php</file>
</testsuite>
</testsuites>
</phpunit>
© 2005–2020 Sebastian Bergmann
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://phpunit.readthedocs.io/en/9.5/organizing-tests.html