运行单元测试时出错

时间:2011-01-23 09:34:32

标签: zend-framework phpunit

我在indexController中有这部分代码:

public function init()
{
  $this->_translate = $this->getInvokeArg('bootstrap')->getResource('translate');
}

这一切都很好,在PRD我没有任何错误

但是当我运行我的单元测试时,会产生以下错误:

  

致命错误:调用成员函数   getResource()在非对象中   K:\阶段   5个\应用\控制器\ IndexController.php   第9行

这是我的测试代码:

class IndexControllerTest extends ControllerTestCase
{
    public function testCanDisplayOurHomepage()
    {
        //Go to the main page of the webapplication
        $this->dispatch('/');

        //check if we don't end up in an error controller
        $this->assertNotController('error');
        $this->assertNotAction('error');

        //Ok no error lets check if we are on the home page
        $this->assertModule('default');
        $this->assertController('index');
        $this->assertAction('index');
        $this->assertResponseCode(200);


    }
}

3 个答案:

答案 0 :(得分:3)

这在我的单元测试中没有用,因为我只调用应用程序引导程序而不是调用run。

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();

要解决这个问题,我将其添加到phpunit boostrap

$appBootstrap = $application->getBootstrap();
$front   = $appBootstrap->getResource('FrontController');
$front->setParam('bootstrap', $appBootstrap);

现在$bootstrap = $this->getInvokeArg('bootstrap');在PHPUnit中运行良好。

答案 1 :(得分:1)

您是否尝试在Bootstrap调用中调用bootstrap进行翻译?

$this->bootstrap("translate")

答案 2 :(得分:0)

选中answer

看起来Zend_Controller_Action->getInvokeArg('bootstrap')在单元测试环境中不起作用。