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