使用PHPUnit与Zend_Test和模拟对象的问题

时间:2011-04-12 18:04:13

标签: zend-framework phpunit

我在使用PHPUnit和Zend_Test以及模拟对象时遇到了问题。我正在使用Keith Pope的结构来学习单元测试。我在tests / modules / default / controllers中进行了Controller测试,在tests / modules / default / models中进行了单元测试。 models目录中还有一个名为TestResources的子目录,其中包含创建模拟对象的文件。

有一个名为Default_Model_UserTest的模型单元测试。它继承自ControllerTestCase,它具有用于所有测试的设置功能。在Default_Model_UserTest中,附加设置强制测试使用TestResources文件夹中的User.php作为资源。设置功能如下:

protected function setUp() {
    parent::setUp();

    // Replace Model Resources with TestResources
    $autoloader = new Zend_Loader_Autoloader_Resource(array(
        'basePath' => dirname(__FILE__),
        'namespace' => 'Default'
        )
    );
    $autoloader->addResourceType('modelResource', 'TestResources', 'Resource');

    $this->object = new Default_Model_User;

}

当我自己运行测试时,它可以使用模拟对象正常工作。我还有一个控制器测试,测试用户是否可以验证针对mysql数据库的哪些测试。当它运行Default_Model_UserTest时,它出现在CustomerControllerTest不在TestResources文件夹中使用User.php但它使用主应用程序目录中的资源User.php,因此它使用的是mysql数据库而不是模拟对象。我无法理解为什么。在尝试调试它时,我发现一旦运行了身份验证测试,它就会完全忽略TestResources文件夹中的User.php。

问题与测试没有正确复位有关我在ControllerTestCase.php中添加了拆解功能:

protected function tearDown()
{
    Zend_Controller_Front::getInstance()->resetInstance();
    $this->resetRequest();
    $this->resetResponse();

    $this->request->setPost(array());
    $this->request->setQuery(array());

    unset($_SERVER['DOCUMENT_ROOT']);
    parent::tearDown();
}

CustomerControllerTest.php中的拆解功能是:

protected function tearDown() 
{
    Zend_Auth::getInstance()->clearIdentity();
    Zend_Session::forgetMe();
     parent::tearDown();            
}

我找到了一个我能想到的问题的答案,但我找不到任何东西。我使用的是PHPUnit 3.5.11和Zend framework 1.11.3。如果有人对这种行为的原因有任何了解,我将非常感激。

0 个答案:

没有答案