在ZF2 OO PHPUnit测试用例代码中使用require/require_once()语句是否正确?

在ZF2 OO PHPUnit测试用例代码中使用require/require_once()语句是否正确?,php,zend-framework,zend-framework2,phpunit,Php,Zend Framework,Zend Framework2,Phpunit,这是一个关于使用面向对象代码原则在Zend Framework 2中正确编码PHPUnit测试的问题 我有以下PHPUnit测试用例: 名称空间fedcousestest; 使用FedcoUser\Controller\MachinistController; 类MachinistControllerTest扩展框架\TestCase {...} 我的MachinistController类如下所示: 名称空间FedcoUser\Controller; 类MachinistController

这是一个关于使用面向对象代码原则在Zend Framework 2中正确编码PHPUnit测试的问题

我有以下PHPUnit测试用例:

名称空间fedcousestest;
使用FedcoUser\Controller\MachinistController;
类MachinistControllerTest扩展框架\TestCase
{...}
我的MachinistController类如下所示:

名称空间FedcoUser\Controller;
类MachinistController扩展\ZfcUser\Controller\UserController
{...}
尝试运行测试用例时,我会遇到以下错误:

Debug Error: MachinistController.php - Class 'ZfcUser\Controller\UserController' not found
这很奇怪,因为我的MachinistController类运行得很好,在作为web应用程序运行时找到了ZfcUser的控制器,而不是通过PHPUnit测试

不知怎的,我决定把一个

require_once'vendor/zf commons/zfc user/src/ZfcUser/Controller/UserController.php';
线进入我的MachinistControllerTest类,现在我的PHPUnit测试运行没有错误

我觉得这很奇怪。

原因:到目前为止,根据我使用ZF2的经验,我还没有使用
require
函数的必要性。ZF2完全是面向对象的,为什么现在呢?这可能是正确的,但有没有更好的方法,如果有,是什么方法

更具体的问题:

  • (正确性)我在代码中使用require_once行使测试用例通过是否正确
  • (ZF2最佳实践)为什么我要在另一种完全面向对象的ZF2代码中使用
    require_once()
    语句(在我看来,使用
    require
    就像程序代码的味道)
  • (OO最佳实践)当我的MachinistController完美地扩展它时,为什么找不到ZfcUser的控制器

请不要忘记,
PHPUnit测试
不是ZF2框架的一部分。ZF2不负责在单元测试文件中自动加载类


您需要自己模拟类,并负责自己要求所有类。

请不要忘记,
PHPUnit测试
不是ZF2框架的一部分。ZF2不负责在单元测试文件中自动加载类


您需要自己模拟类,并负责自己要求所有类。

通常,在运行测试之前,您会使用PHPUnit的引导功能来引导应用程序的某些元素(包括自动加载程序)。手册中有一个引导示例:。就我个人而言,我使用了一个稍微修改过的版本,它还引入了作曲家自动加载器。然后,在测试中不需要任何类。

通常,在运行测试之前,您会使用PHPUnit的引导功能来引导应用程序的某些元素(包括自动加载程序)。手册中有一个引导示例:。就我个人而言,我使用了一个稍微修改过的版本,它还引入了作曲家自动加载器。然后,您不需要在测试中要求任何类。

我最终将额外的名称空间加载到TestConfiguration.php文件中的配置中:

$additionalNamespaces=数组(
“ZfcUser\Controller'=>\uuuuu DIR\uuuuuu.'/../../../../../../../vendor/zf commons/zfc user/src/ZfcUser/Controller/”
);
这非常适合我的
bootstrap.php
,它有以下代码:


最后,我在TestConfiguration.php文件的配置中加载了其他名称空间:

$additionalNamespaces=数组(
“ZfcUser\Controller'=>\uuuuu DIR\uuuuuu.'/../../../../../../../vendor/zf commons/zfc user/src/ZfcUser/Controller/”
);
这非常适合我的
bootstrap.php
,它有以下代码:


我的
bootstrap.php
看起来像一个库存文件,不能更改。相反,它看起来像是要更改
TestConfiguration.php
文件。(bootstrap.php、TestConfiguration.php.dist和phpunit.xml)[要删除
require()
,我不知道应该更改什么,在哪里更改,以及应该保留什么…我的
bootstrap.php
看起来像一个库存文件,不能更改。相反,它看起来像
TestConfiguration.php
文件要更改。(bootstrap.php、TestConfiguration.php.dist和phpunit.xml)[要删除
require()
,我不知道应该更改什么、在哪里更改,以及应该保留什么。。。
// setup autoloader
AutoloaderFactory::factory(
    array(
        'Zend\Loader\StandardAutoloader' => array(
            StandardAutoloader::AUTOREGISTER_ZF => true,
            StandardAutoloader::ACT_AS_FALLBACK => false,
            StandardAutoloader::LOAD_NS => $additionalNamespaces,
        )
    )
);