Я запускаю серию тестов в phpunit, которые существуют в отдельных testuites, список которых контролируется файлом конфигурации phpunit. Когда тесты запускаются индивидуально (т.е. Не через файл конфигурации и, следовательно, начиная с testuite за один раз), они проходят, но при запуске вместе я получаю сбой.
При закрытом изучении проблема заключается в том, что каждый из этих testuite загружается в фреймворк (через require_once), и эта структура выполняет некоторую внутреннюю конфигурацию, основанную на настройках во время require_once. Похоже, что между запуском testuites, отдельно указанным в файле конфигурации phpunit, сохраняются различные вещи. В этом конкретном случае структура уже рассматривается как загруженная.
Итак, есть ли способ заставить phpunit выполнять последовательность тестов, независимо от того, что происходит с запуском phpunit на тестах по одному за раз? (phpunit запускается cruisecontrol на автотестовой машине и локально разработчиками перед отправкой.) Я пробовал варианты, такие как "-process-изоляция" и "-no-globals-backup" без успеха.
Быстрый пример, который иллюстрирует проблему, будет файл констант. php:
<?php
if (defined('XYZZY')) define('TEST', 1);
else define('TEST', 2);
testuite 'TestOne.php':
<?php
define('XYZZY', "");
require_once('constant.php');
class TestOne extends PHPUnit_Framework_TestCase
{
public function testOne()
{
$this->assertEquals(TEST, 1);
}
}
аналогичный testuite 'TestTwo.php':
<?php
require_once('constant.php');
class TestTwo extends PHPUnit_Framework_TestCase
{
public function testTwo()
{
$this->assertEquals(TEST, 2);
}
}
и конфигурационный файл phpunit:
<phpunit>
<testsuites>
<testsuite name="First">
<file>./TestOne.php</file>
</testsuite>
<testsuite name="Second">
<file>./TestTwo.php</file>
</testsuite>
</testsuites>
</phpunit>