Я столкнулся с необычной проблемой загрузки классов в 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.
Я не исправил это, но мои методы сборки теперь настолько длинные, что в любом случае имеет смысл появляться в разных классах. У меня есть соглашение об именах, так что тест *Test.php
имеет соответствующий класс сборки *Build.php
,
Я использую систему начальной загрузки PHPUnit для сканирования классов сборки и вызова статического build()
в течение автоматически.
Может быть, вы также испытываете Эта проблема.
Наличие пути в качестве параметра является нормальным поведением в этой точке, проверьте далее вниз в PHPUnit_Runner_StandardTestSuiteLoader::load
вызывает это сбивающее с толку сообщение об ошибке.