В моем проекте есть класс, который управляет автозагрузкой.Каждый новый экземпляр класса добавляет свою функцию автозагрузки в стек автозагрузки SPL, а при сбросе экземпляра удаляет свой собственный экземпляр из стека.Класс также экспортирует метод register () и unregister (), который позволяет временно удалить его из стека автозагрузки.
Я пытаюсь написать модульный тест для автозагрузчика и столкнулся с несколькими проблемами.Я включил автозагрузчик в мой скрипт начальной загрузки PHPUnit, чтобы другие тестируемые классы могли загружаться автоматически, как при обычном использовании.Я хочу отключить это поведение на время модульного теста автозагрузчика, поскольку, хотя я могу проводить модульное тестирование, не отключая обычный автозагрузчик, я не мог быть уверен, что мой модульный тест прошел или не прошел из-за экземпляра автозагрузчика, который находится взагрузчик или экземпляр, который я тестирую.
Я попытался сделать следующее в моем файле начальной загрузки:
$unitTestAutoloader = new gordian\reefknot\autoload\Autoload ();
и затем реализовать следующий код в моем модульном тесте:
namespace gordian\reefknot\autoload;
use gordian\exampleclasses;
/**
* Test class for Autoload.
* Generated by PHPUnit on 2011-12-17 at 18:10:33.
*/
class AutoloadTest extends \PHPUnit_Framework_TestCase
{
/**
* @var gordian\reefknot\autoload\Autoload
*/
protected $object;
public function __construct ()
{
// Disable the unit test autoloader for the duration of the following test
global $unitTestAutoloader;
$unitTestAutoloader -> unregister ();
}
public function __destruct ()
{
// Restore normal autoloading when the test is done
global $unitTestAutoloader;
$unitTestAutoloader -> register ();
}
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp ()
{
$this -> object = new Autoload ('\\', 'gordian\exampleclasses', __DIR__ . '/exampleclasses');
}
// Unit tests go here
}
Я думал, что это будет работать, но, к сожалению, он просто выдает ошибку, когда я вместо этого запускаю все модульные тесты, очевидно, потому что автозагрузчик не работает ни для одного из других модульных тестов.
Я подозреваю, что PHPUnit инициализирует все классы модульных тестов перед запуском всех тестов, а мой класс тестов автозагрузчика не позволяет другим классам тестов автоматически загружать классы, которые они должны тестировать.Это правильно?
Можно ли как-нибудь обойти эту проблему?Смогу ли я отключить автозагрузчик по умолчанию каким-либо другим способом, кроме как сделать это в конструкторе тестов?Любые советы в этом случае будут оценены.