кодесурса
«PHPUnit

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

script1adsense2code
script1adsense3code

Вступление

Организация тестов очень важна в PHPUnit. Одна из основных целей PHPUnit состоит в том, что тесты должны быть составными и независимыми: мы хотим иметь возможность выполнять любое количество или комбинацию тестов вместе без помех.

Например, тесты для всего проекта, или тесты для всех классов компонента, который является частью проекта, или только тесты для одного класса должны выполняться без нарушения одного другого.

PHPUnit поддерживает различные способы организации тестов и их объединения в набор тестов, но в этом руководстве рассматриваются наиболее часто используемые подходы.

# Составление набора тестов с использованием файловой системы

Этот тип организации файлов, вероятно, является самым простым способом создания набора тестов. Это включает в себя хранение всех исходных файлов тестового набора в тестовом каталоге. PHPUnit может автоматически обнаруживать и запускать тесты, рекурсивно просматривая каталог test.

Например, давайте взглянем на набор тестов библиотеки sebastianbergmann / money. Рассматривая структуру каталогов этого проекта, мы видим, что классы тестовых примеров в каталоге `tests` отражают структуру пакета и классов тестируемой системы (SUT) в каталоге` src`:

 src тесты
`- Currency.php` - CurrencyTest.php
`- IntlFormatter.php` - IntlFormatterTest.php
`- Money.php` - MoneyTest.php
`- autoload.php

С помощью вышеприведенной организации для запуска тестов для этой библиотеки нам просто нужно указать бегущему из командной строки PHPUnit на каталог test, как показано в примере ниже

$ phpunit --bootstrap src/autoload.php tests
PHPUnit |version|.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
PHPUnit |version|.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 |version|.0 by Sebastian Bergmann and contributors.
..
Time: 167 ms, Memory: 3.00Mb
OK (2 test, 2 assertions)

Замечания:

Недостаток этого подхода заключается в том, что мы не можем контролировать порядок выполнения тестов. Это может привести к проблемам в отношении тестовых зависимостей.

В следующем разделе вы увидите, как сделать явный порядок выполнения теста с помощью файла конфигурации XML.

# Составление набора тестов с использованием конфигурации XML

XML-файл конфигурации PHPUnit также можно использовать для создания набора тестов. Когда это используется в тестовой композиции, порядок, в котором должно быть выполнено испытание, может полностью контролироваться.

Пример ниже иллюстрирует минимальный файл `phpunit.xml`, который добавит все классы` * Test`, которые находятся в файлах `* Test.php`, когда каталог` tests` рекурсивно просматривается.

Пример, иллюстрирующий состав набора тестов с использованием конфигурации XML

<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <directory>tests</directory>
    </testsuite>
  </testsuites>
</phpunit>

Если `phpunit.xml` или` phpunit.xml.dist` существуют в текущем рабочем каталоге и флаг `--configuration` не используется, конфигурация будет автоматически считана из этого файла.

С помощью файла конфигурации 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>

Предыдущий: Подробнее о светильниках
Далее: Рискованные тесты

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code