Zend framework zend framework不是引导的正确方法

Zend framework zend framework不是引导的正确方法,zend-framework,phpunit,bootstrapping,Zend Framework,Phpunit,Bootstrapping,我打电话来 $this->application->bootstrap()->run(); 从我的测试设置函数内部,没有输出。您是否应该在测试环境中调用run() 我的测试工作正常,但前端控制器插件从未执行过(这是我的应用程序所必需的)。put->run()执行插件,但phpunit只是停止,没有输出 我有工作测试,但我需要前端控制器插件在测试环境中执行。引导程序执行,但插件不执行。当它们通过->run()执行此操作时,不会出现输出 有什么建议吗 编辑:添加了setup()

我打电话来

$this->application->bootstrap()->run(); 
从我的测试设置函数内部,没有输出。您是否应该在测试环境中调用
run()

我的测试工作正常,但前端控制器插件从未执行过(这是我的应用程序所必需的)。put
->run()
执行插件,但phpunit只是停止,没有输出

我有工作测试,但我需要前端控制器插件在测试环境中执行。引导程序执行,但插件不执行。当它们通过
->run()
执行此操作时,不会出现输出

有什么建议吗

编辑:添加了
setup()
示例

require_once realpath(__DIR__.'/../../').'/TestBackendConfiguration.php';

abstract class Controllers_Backend_BaseControllerTest extends Zend_Test_PHPUnit_ControllerTestCase {

    protected $config;
    protected $application;
    protected $users;
    protected static $iterations = 0;

    public function setUp() {
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp();
        $this->configureUsers();
        $this->configureACL($this->users);
    }

    public function appBootstrap() {
        $this->config = new Zend_Config_Ini(CORE_PATH . '/configs/common.ini', APPLICATION_ENV, true);
        $this->config->merge(new Zend_Config_Ini(CORE_PATH . '/configs/backend.ini', APPLICATION_ENV));
        $this->config->merge(new Zend_Config_Ini(CORE_PATH . '/configs/application.ini', APPLICATION_ENV));

        // Reset bootstraps
        $this->config->bootstrap->path = CORE_PATH . '/backend/Bootstrap.php';
        $this->config->resources->frontController->controllerDirectory = CORE_PATH . '/backend/controllers';
        $this->config->resources->frontController->actionHelperPaths->Frontend_Controller_Action_Helper = CORE_PATH . '/backend/controllers/Action/Helper';
        $this->config->resources->frontController->baseUrl = "/admin";
        $this->config->resources->layout->layoutPath = CORE_PATH . '/backend/layouts/scripts';


        $this->application = new Zend_Application( APPLICATION_ENV, $this->config );

        $this->application->bootstrap()->run(); 
     }
}
之所以调整到
$this->config
,是因为我有与前端和后端相关的测试,它们需要不同的配置。它们有自己的
Configuration.php
脚本,它们都声明
APPLICATION\u PATH
,因此任何测试运行都无法重新定义此常量,并且应用程序无法正确引导

现在,我主要担心的是,我的插件没有在测试环境中调度,这会稍微破坏我的应用程序,因为我已经将数据添加到了我需要访问的注册表中,而它显然不在那里。想法


添加
->run()。我的后端控制器测试都扩展了这个类,这个类负责设置后端测试环境。

设置方法实际上不应该引导应用程序,只需要创建类来允许测试这样做。因此,我认为您需要做的就是删除这一行:

$this->application->bootstrap()->run(); 

为了安全起见,我还移动了
parent::setUp()行,以便在函数末尾调用它(在两个配置方法之后)。如果这些方法依赖于存在的引导,那么将它们移动到
appBootstrap
函数。

我最近遇到了类似的问题,最终找到了解决方案。我希望它对某人有用

测试环境中的资源问题是引导对象在方法
Zend_Application\u bootstrap\u bootstrap::run()
中被指定为FrontController参数,但此方法从未在测试环境中执行。这就是通过引导获取任何资源时出错的原因(我假设您在代码中的某个地方使用
Zend\u Controller\u Front::getInstance()->getParam('bootstrap')

帮助我的解决方法是在单元测试中手动将引导参数设置为FrontController,如下所示:

public function setUp() {
    $this->bootstrap = array($this, 'appBootstrap');
    parent::setUp();
}

public function appBootstrap()
{
    $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
    $this->application->bootstrap();
    // set bootstrap param
    $bootstrap = $this->application->getBootstrap();
    $front = $bootstrap->getResource('FrontController');
    $front->setParam('bootstrap', $bootstrap);
}

不,您不需要调用run()。您的测试类是否扩展了Zend\u test\u PHPUnit\u ControllerTestCase
?你能发布整个安装方法吗?当然,是的,测试类扩展了Zend_test_PHPUnit_ControllerTestCase。我有一个具有设置功能的基类,然后我的单个控制器测试扩展了这个类。好的,插件现在正在工作,执行顺序正确(插件正在被调用)。谢谢你。我现在面临两个问题…我的模型抱怨Zend_Db_Table_异常:找不到适配器,测试抱怨Zend_Controller_异常:没有为此应用程序定义默认模块这些是引导问题吗?