phpunit Сбросить среду между тестами

У меня есть приложение symfony2, и я использую phpunit.

У меня есть несколько модульных тестов, в которых я использую моки для имитации AppKernel и функциональных тестов, которые делают «настоящие» запросы к приложению. При запуске только модульных тестов или функциональных тестов все работает нормально.

Это неприятно, когда я хочу запустить все тесты одновременно. Как только модульные тесты завершены, phpunit останавливается, сообщая мне:

Fatal error: Cannot redeclare class AppKernel in C:\Users\sebastian\workspace\ppInterface\app\AppKernel.php on line 35

Я этого не понимаю, так как думал, что phpunit будет запускать каждый тест в своей собственной среде. Кажется, это не так. Что я могу сделать, чтобы все исправить и «сбросить» среду, в которой выполняются тесты?


person Sgoettschkes    schedule 01.09.2011    source источник


Ответы (1)


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

Включает - проблема в вашем случае - не сбрасываются (и не могут в одном отдельном процессе). Решением было бы использовать require_once вместо require или использовать изоляцию процесса либо в файле phpunit.xml, либо в тестовом примере (@runTestsInSeparateProcesses), либо в методе тестирования (@runInSeparateProcess).

Вы также можете влиять на то, что сбрасывается между тестами:

  • @backupGlobals
  • @backupStaticAttributes
person cweiske    schedule 01.09.2011
comment
@runTestsInSeparateProcesses отлично работает! Добавил в тесты и теперь все без проблем запускается. Однако я хотел бы добавить его в свой phpunit.xml, но не смог найти никаких документов о том, куда его добавить. Я хотел бы добавить его в группу, определенную в «группах» в моем xml. Это возможно? - person Sgoettschkes; 01.09.2011
comment
Имейте в виду, что выполнение тестов в отдельных процессах начнет значительно замедляться по мере роста вашего приложения. Возможно, вы захотите рассмотреть возможность запуска тестов в двух группах: те, которые используют макеты, и те, которые не используют. - person David Harkness; 02.09.2011
comment
Конечно, вы можете настроить его в своем phpunit.xml: просто добавьте processIsolation = "true" к <phpunit>. - person mAu; 25.05.2012