运行PHPUnit测试会产生" Class Not Found"错误

时间:2013-12-05 22:44:01

标签: php zend-framework tdd phpunit autoloader

这是一个关于PHP单元测试的问题,给我一个未找到类的错误。

背景

我正在使用Zend Studio 10.5开发Zend Framework 2应用程序。我加载了一些模块,包括ZfcUserBjyAuthorize

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甚至还有一个自动加载器吗?如果有帮助,我的模块bootstrap.php文件夹中有phpunit.xmlTestConfiguration.php/test/文件。我试图随机添加各种模块和路径到TestConfiguration.php文件,如下所示,但它没有帮助:

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

你能帮忙吗?

1 个答案:

答案 0 :(得分: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,
        )
    )
);