Spec-Zone.ru › PHPUnit 9

Организация тестов

Одна из целей 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.

Пример 5.1 Создание набора тестов с помощью XML-конфигурации
<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 не используется, конфигурация будет автоматически считываться из этого файла.

Порядок выполнения тестов можно сделать явным:

Пример 5.2 Создание набора тестов с помощью XML-конфигурации
<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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API