Spec-Zone.ru › PHPUnit 8

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

Одна из целей 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 8.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 8.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 8.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 8.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/8.5/organizing-tests.html

Spec-Zone.ru

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