在ZF2 OO PHPUnit测试用例代码中使用require/require_once()语句是否正确?
这是一个关于使用面向对象代码原则在Zend Framework 2中正确编码PHPUnit测试的问题 我有以下PHPUnit测试用例:在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
名称空间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,
)
)
);