Как настроить PHPUnit для тестирования всей папки вендора в приложении ZF2?

Я разрабатываю приложение Zend Framework 2 с общей структурой папок, чтобы папка /vendor содержит все (внешние проекты) библиотеки. Настройка среды модульного тестирования Я хотел бы иметь возможность запускать все тесты вендоров. Структура папок различается в зависимости от библиотеки. Некоторые пакеты не имеют тестов вообще.

Возможным решением было бы создать «поставщика» тестового набора и вручную указать пути к каждой отдельной тестовой папке, например:

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
<testsuites>
<testsuite name="vendor">
<directory>../vendor/lib-foo/path/to/tests</directory>
<directory>../vendor/package-bar/path/to/tests</directory>
...
</testsuite>
...
</testsuites>
...
</phpunit>

Мне не нравится это решение. Прежде всего, потому что тогда мне придется обрабатывать каждую упаковку вручную.

Другое решение было бы определить /vendor в качестве тестовой папки:

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
<testsuites>
<testsuite name="vendor">
<directory>../vendor</directory>
...
</testsuite>
...
</testsuites>
...
</phpunit>

Хорошо, но тогда PHPUnit должен сканировать множество папок, которые ему не нужны, и тестам потребуется гораздо больше времени.

Есть ли лучшее решение, которое позволило бы автоматизировать процесс и избежать значительной ручной настройки?

2

Решение

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

Я бы, наверное, использовал для этого магию раковины. Обратите внимание, что этот пример опирается на наличие phpunit.xml(.dist) файл в каждом из ваших сторонних пакетов (для большинства библиотек это разумное предположение). Вы можете даже интегрировать это в свой процесс непрерывной интеграции, чтобы постоянно тестировать это:

for FILE in $(find . -name 'phpunit.xml*') ; do
sh -c 'cd '$(dirname $FILE)' && composer install'
vendor/bin/phpunit -c $FILE
done
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]