Я пытаюсь предоставить вам несколько рабочих примеров --process-изоляция без глобального резервного копирования.
Надеюсь, вы сможете заставить свои тесты работать с ними.Если нет, просто оставьте мне комментарий, и я постараюсь вернуться к вам.
Я протестировал большую часть этого с 3.4.15, и все с HEAD (3.5.x, как ожидается, тоже будет работать)
Самый простой способ сделать это:
<?php
class Test extends PHPUnit_Framework_TestCase
{
public function testOne()
{
define('FOO', 'BAR');
$this->assertEquals('BAR', FOO);
}
public function testTwo()
{
define('FOO', 'BAZ');
$this->assertEquals('BAZ', FOO);
}
}
и производит:
phpunit --process-изоляция processTest.php
PHPUnit @ package_version @ от Себастьяна Бергманна.
..
Время: 0 секунд, Память: 1,25 МБ
OK (2 теста, 2 утверждения)
Итак, если вы сгруппируете свой тест в комплекты тестов или сможете запустить настройку для каждого тестового набора (в зависимости от того, насколько он дорогой), вы можете сделать что-то простое, например:
<?php
class Test extends PHPUnit_Framework_TestCase
{
public function setUp()
{
// your bootstrap for testsuite X
// Maybe put this in a baseclass for that suite ?
}
public function testOne()
{
$this->assertEquals('BAR', FOO);
}
Inshort
Убедитесь, что вы запустили свой установочный код ПОСЛЕ того, как вы ввели тест (и изоляцию процесса)
Если все остальное не удалось и вы / мы не можем решить эту проблему:
С расширением runkit
(небезопасно ни для чего, даже вблизи производства, используйте в качестве крайней меры), вы можете вызывать такие функции, какrunkit-constant-remove()
Надеюсь, это поможет.Если нет: дайте мне знать