PHPUnit не может найти тестовый класс, если он автоматически / вручную загружается в начальной загрузке

Я столкнулся с необычной проблемой загрузки классов в PHPUnit, первоначально с 4.3.5, а теперь и с последней 4.4.2 (последняя стабильная версия).

У меня есть файл начальной загрузки, который загружается через phpunit.xml автоматически, который включает в себя автозагрузчик Composer по умолчанию, а также мой собственный автозагрузчик. Это работает нормально, как есть. Тем не менее, я обнаружил, что если я загружаю тестовый класс в загрузчик, затем PHPUnit не может правильно определить имя класса и, следовательно, не загружается.

Я получаю эту ошибку:

Класс ‘test / unit / tests / UpdateAllTest’ не найден в /full/project/path/webapp/test/unit/tests/UpdateAllTest.php.

(Моя цель в том, чтобы обратиться к тестовому классу в начальной загрузке, состоит в том, чтобы добавить метод построения базы данных в каждый из них, сохраняя его вместе с тестовым файлом, к которому он относится. Я планирую сделать это в начальной загрузке, а не в setUp() метод, как я хочу, чтобы он запускался один раз для всех тестов, а не один раз для каждого метода тестирования).

Я сделал небольшую отладку внутри самого PHPUnit (в частности, PHPUnit_Runner_StandardTestSuiteLoader::load) и обнаружил, что имя класса неверно указано как путь, а не как имя класса в пространстве имен. Вот соответствующий пункт:

    if (class_exists($suiteClassName, false)) {
$class = new ReflectionClass($suiteClassName);

if ($class->getFileName() == realpath($suiteClassFile)) {
return $class;
}
}

Значение $suiteClassName является test/unit/tests/UpdateAllTestкоторый явно не является пространством имен, это должно быть Awooga\Testing\Unit\UpdateAllTestчто-то, что обычно обрабатывается пользовательским отображением в моем автозагрузчике.

Я не думаю, что я делаю что-нибудь в частности необычно для PHPUnit, и поэтому вряд ли это ошибка, с которой еще никто не сталкивался. В этих обстоятельствах, возможно, мне нужно объявить пространства имен классов в phpunit.xml или что-то необычное в этом роде? Хватает за соломинку здесь!

Мы будем благодарны за любые мысли о том, что может быть причиной этой, казалось бы, тривиальной проблемы. А пока я просто перенесу эти методы настройки в другой файл / класс — не идеальный, но и не конец света. Я на PHP 5.5.x и Ubuntu 12.04.

1

Решение

Я не исправил это, но мои методы сборки теперь настолько длинные, что в любом случае имеет смысл появляться в разных классах. У меня есть соглашение об именах, так что тест *Test.php имеет соответствующий класс сборки *Build.php,

Я использую систему начальной загрузки PHPUnit для сканирования классов сборки и вызова статического build() в течение автоматически.

1

Другие решения

Может быть, вы также испытываете Эта проблема.

Наличие пути в качестве параметра является нормальным поведением в этой точке, проверьте далее вниз в PHPUnit_Runner_StandardTestSuiteLoader::load вызывает это сбивающее с толку сообщение об ошибке.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector