Запуск теста PHPUnit дает ошибку Class Not Found

Это вопрос о модульном тесте PHP, который дает мне ошибку «Класс не найден».

Фон

Я использую Zend Studio 10.5 для разработки приложения Zend Framework 2. У меня загружено несколько модулей, в том числе ZfcUser и BjyAuthorize

FedcoUser — это модуль с Controller Guard, который использует правила защиты BjyAuthorize:

<?php
namespace FedcoUser\Controller;

use Zend\View\Model\ViewModel;
use ZfcUser\Controller\UserController as ZfcUserController;

class MachinistController extends ZfcUserController
{
    public function indexAction()
    {
        if (!$this->zfcUserAuthentication()->hasIdentity()) {
            return $this->redirect()->toRoute($this->getOptions()->getLoginRedirectRoute());
        }

        return new ViewModel();
    }
}

Используя собственные меню Zend Studio 10.5, я создал тестовый пример для контроллера выше. Когда я запускаю его, я получаю следующую ошибку:

Debug Error: FedcoUser/Controller/MachinistController.php line 8 - Class 'ZfcUser\Controller\UserController' not found

Я предполагаю, что каким-то образом автозагрузчик для PHPUnit не может понять, где находится класс, потому что класс, который он не может найти, находится в

vendor/zf-commons/zfc-user/src/ZfcUser/Controller/UserController.php

Я еще не знаком с тем, как работает PHPUnit, чтобы исправить эту ошибку. Есть ли у PHPUnit автозагрузчик? В папке /test/ моего модуля есть файлы с именами bootstrap.php, phpunit.xml и TestConfiguration.php, если это поможет. Я пытался случайным образом добавлять различные модули и пути к файлу TestConfiguration.php, как показано ниже, но это не помогло:

 $additionalModulePaths = array(
     'ZfcUser' => realpath('vendor/zf-commons/zfc-user/src/ZfcUser/Controller/UserController.php'),
);

Вы можете помочь?


person Dennis    schedule 05.12.2013    source источник
comment
Кто использует автозагрузку в своем проекте?   -  person sectus    schedule 06.12.2013
comment
Я не уверен, что понимаю вопрос. Ответ, который я даю, может быть неактуален. Я использую ZendSkeletonApplication + несколько модулей Zfc + модуль BjyAuthorize. Я добавил модуль FedcoUser, который имеет Module.php с функцией getAutoloaderConfig(). есть также файлы autoload_classmap.php, autoload_function.php и autoload_register.php. Я могу опубликовать код внутри них, если это актуально.   -  person Dennis    schedule 06.12.2013


Ответы (1)


В итоге я загрузил дополнительные пространства имен в свою конфигурацию внутри моего файла TestConfiguration.php:

$additionalNamespaces = array(
    'ZfcUser\Controller' => __DIR__ . '/../../../vendor/zf-commons/zfc-user/src/ZfcUser/Controller/'
);

это прекрасно вписывалось в мой bootstrap.php, у которого был следующий код:

// setup autoloader
AutoloaderFactory::factory(
    array(
        'Zend\Loader\StandardAutoloader' => array(
            StandardAutoloader::AUTOREGISTER_ZF => true,
            StandardAutoloader::ACT_AS_FALLBACK => false,
            StandardAutoloader::LOAD_NS => $additionalNamespaces,
        )
    )
);
person Dennis    schedule 12.12.2013