3

我正在尝试为我正在编写的 ZF 应用程序编写一些测试用例,但我似乎无法超越这一点。

我扩展了Zend_Test_PHPUnit_ControllerTestCase,添加了以下内容:

public function setUp() {
    $this->bootstrap = new Zend_Application('testing', 
        APPLICATION_PATH . '/configs/application.ini');
    parent::setUp();
}

它工作,它初始化 Zend Autoloader,允许我在我的库中加载其他类以及 Zend 类。所以我设置了一个测试:

public function testUserUnauthorized() {
    $this->dispatch('/api/user');
    //Assertions...
}

可悲的是,测试从未通过调度。相反,它给了我一个错误:

Fatal error: Class 'App_Model_User' not found in ....Action.php

Action.php 是一个扩展类Zend_Controller_Action。其中,有一个App_Model_User用于验证登录用户的功能。require_once自从自动加载器工作以来,我从来不需要添加一个。这是奇怪的部分:它通过我的浏览器工作。只是不在 PHPUnit 中。

所以我转储了用 Zend Autoloader 注册的 Autoloader:

public function testUserUnauthorized() {
    print_r(Zend_Loader_Autoloader::getInstance()->getAutoloaders());
    exit;
    $this->dispatch('/api/user');
}

它显示了我的所有模块,以及视图、控制器、模型等的命名空间。我通过浏览器做了同样的事情,并且转储匹配。

4

1 回答 1

1

Zend Autoloader 需要将 App_ 添加为自动加载前缀,才能按预期工作,如下所示:

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace("App_");
于 2012-06-23T16:11:44.977 回答