加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – 在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg

发布时间:2020-05-31 00:50:32 所属栏目:PHP 来源:互联网
导读:根据 this邮件列表讨论,访问Zend MVC控制器中的应用程序资源的推荐方法是: $this-getInvokeArg(bootstrap)-getResource(foo); 这适用于生产(浏览到相应的网页时).但是,当使用Zend_Test_PHPUnit_ControllerTestCase测试包含此代码的控制器操作时,我得到: PHP

根据 this邮件列表讨论,访问Zend MVC控制器中的应用程序资源的推荐方法是:

$this->getInvokeArg('bootstrap')->getResource('foo');

这适用于生产(浏览到相应的网页时).但是,当使用Zend_Test_PHPUnit_ControllerTestCase测试包含此代码的控制器操作时,我得到:

PHP致命错误:在第12行的… / application / controllers / IndexController.php中的非对象上调用成员函数getResource()

在介绍getInvokeArg之前,测试运行得很好.问题是,如何在测试工具中使用“推荐”方式访问资源?

刚检查:$this-> getFrontController() – > getParam(‘bootstrap’) – > getResource(‘foo’)也不起作用.

更新:我用phpunit调用应用程序引导程序–bootstrap ./scripts/application_bootstrap.php …我知道它执行正常.

我有:

$application = new Zend_Application(
    APPLICATION_ENV,APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap();
编辑:对不起,我第一次错过了你的那部分问题(还没有咖啡!).我编辑了答案.

问题在于Zend_Test_PHPUnit_ControllerTestCase用于单元测试控制器.它尝试从框架的其余部分使用非常少的依赖项,并且它不会自动运行/ bootstrap /任何(并且不知道)您的大型应用程序.

基本上,getResouce不起作用,因为你的bootstrap不存在.

如果您浏览Zend_Test_PHPUnit_ControllerTestCase,您将看到它手动设置并使用Zend_Controller_Front,并为每个测试初始化自己的请求/响应对象.它试图尽可能多地进行单元测试,而不是功能测试或集成测试.

要解决您的问题,您必须告诉测试套件如何引导您的应用程序.有几种方法可以实现这一目标.

一,您可以将文件分配给测试类的公共引导属性.

public $bootstrap = '/path/to/bootstrap/file.php'

对于使用Zend_Application的应用程序,这是一个不错的选择.

或者,通过提供bootstrap属性的回调:

public function setUp()
{
    // Use the 'start' method of a Bootstrap object instance:
    $bootstrap = new Bootstrap('test');
    $this->bootstrap = array($bootstrap,'start');
    parent::setUp();
}

注意:如果覆盖它,则调用父setUp方法非常重要.

编辑2:好的,你实际上正在引导你的应用程序.所以,你已经完成了上述工作,但仍然没有运气.

我建议覆盖TestCase的调度方法,以确保它正在接收引导程序. (这肯定会起作用).

public function dispatch($url = null)
{
    $this->getFrontController()->setParam('bootstrap',$yourBootstrap);
    parent::dispatch($url);
}

想想看,你也可以在setUp中做到这一点.

这将允许测试套件正确模仿由Zend_Application构造的前端控制器的行为.访问引导程序的两种方法现在都可以使用.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读