zend框架phpunit正确的引导方式

时间:2013-03-02 00:10:03

标签: zend-framework phpunit bootstrapping

我正在打电话

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

来自我的测试设置功能,并且没有输出。你应该在测试环境中调用run()吗?

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

我有工作测试,但我需要前端控制器插件才能在测试环境中执行。 Bootstrap执行,但插件不执行。当他们通过->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_PATH,因此测试运行的第二个不能重新定义这个const,并且应用程序没有正确引导。

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

添加->run()会调度插件,但我的测试没有输出。我的后端控制器测试都扩展了这个负责设置后端测试环境的类。

1 个答案:

答案 0 :(得分:0)

安装方法实际上不应该引导应用程序,只需创建类以允许测试执行此操作。所以我认为您需要做的就是删除这一行:

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

为了安全起见,我还会在您的设置方法中移动parent::setUp();行,以便在函数结束时调用它(在您的两个配置方法之后)。如果这些方法依赖于引导程序,那么请将它们移动到appBootstrap函数。