Когда я запускаю PHPUnit, он пытается запустить тестовые файлы в неожиданных местах, а именно в каталог установки Twig, и пытается слишком многократно загружать файлы класса Twig. Кто-нибудь знает, как исправить эти проблемы?Модульное тестирование в PHPUnit с установленным Twig
фон
Я использую Twig (только Twig, не Symfony) в веб-приложение, с установленным Twig через Composer. Композитор и Twig установлены в пользовательских местах, и мои тесты в /test/
, поэтому я имею следующую упрощенную структуру проекта:
/src/includes/vendor/
autoload.php
composer/
twig/
twig/
lib/
test/
/test/
bootstrap.php
(various files named, e.g., someClassTest.php)
Мой загрузочный файл (/test/bootstrap.php
) не делает ничего, кроме загрузки Композитор автозагрузчика:
<?php
require_once dirname(__FILE__) . "/../src/includes/vendor/autoload.php";
Мой PHPUnit конфигурационный файл (phpunit.xml) выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
<testsuites>
<testsuite name="All Tests">
<directory>./test/phpunit/</directory>
</testsuite>
</testsuites>
<php>
<ini name="xdebug.default_enable" value="0" />
<ini name="xdebug.remote_autostart" value="0" />
<ini name="xdebug.remote_enable" value="0" />
<ini name="xdebug.overload_var_dump" value="0" />
<ini name="xdebug.show_mem_delta" value="0" />
</php>
</phpunit>
Проблемы
1. PHPUnit запускает тесты модуля Twig в /src/includes/vendor/composer/twig/twig/test/
.
Почему? Основываясь на моем файле конфигурации, я ожидал бы только тесты в /test
для запуска. На данный момент, я создал отдельный конфигурационный файл, который явно исключает испытания Twig с этой записью:
<exclude>./src/includes/vendor/</exclude>
Это чувствует Hacky и хрупким, и я не понимаю, почему это необходимо. Может кто-нибудь объяснить это?
2. Если я попытаюсь запустить PHPUnit без явного исключения тестов модуля Twig, я столкнулся с проблемами автозагрузчика.
Если я запустил PHPUnit без включения файла bootstrap.php, то автозагрузчик Composer не будет загружен, поэтому PHPUnit умрет при первом запуске любых классов Twig.
Если я включаю автозагрузчика классы загружаются дважды, и я получаю эту ошибку:
Fatal error: Cannot redeclare class Twig_Node_Expression_Test in [path to project]\src\includes\vendor\twig\twig\lib\Twig\Node\Expression\Test.php on line 32
Call Stack:
0.1630 223296 1. {main}() C:\Users\Ed\AppData\Local\Temp\ide-phpunit.php:0
0.4280 857528 2. IDE_Base_PHPUnit_TextUI_Command::main() C:\Users\Ed\AppData\Local\Temp\ide-phpunit.php:552
0.4280 864000 3. PHPUnit_TextUI_Command->run() C:\Users\Ed\AppData\Local\Temp\ide-phpunit.php:294
1.8451 1338552 4. PHPUnit_Runner_BaseTestRunner->getTest() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/TextUI/Command.php:150
107.4751 1501304 5. PHPUnit_Framework_TestSuite->addTestFiles() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Runner/BaseTestRunner.php:96
107.6552 1668912 6. PHPUnit_Framework_TestSuite->addTestFile() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Framework/TestSuite.php:416
107.6572 1668888 7. PHPUnit_Util_Fileloader::checkAndLoad() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Framework/TestSuite.php:355
107.6592 1669056 8. PHPUnit_Util_Fileloader::load() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Util/Fileloader.php:76
у меня не было никаких подобных проблем, на самом деле работает приложение; это происходит только при модульном тестировании.
Если это помогает, я запускаю PHPStorm 9 (PS-141.1717), используя PHPUnit 3.7.37.
У кого-нибудь есть понимание этой проблемы?
Редактировать на основе комментариев: командная строка, PhpStorm выполняется следующим образом:
C:\xampp\php\php.exe C:/Users/Ed/AppData/Local/Temp/ide-phpunit.php --bootstrap [path to project]\test\phpunit\bootstrap.php --configuration [path to project]\phpunit.xml [path to project]
Какова команда, которую вы используете для запуска тестов? –
@AlainTiemblo См. Мое редактирование. –