代码之家  ›  专栏  ›  技术社区  ›  sanders

关于Zend框架中的单元测试和一般的单元测试

  •  0
  • sanders  · 技术社区  · 16 年前

    我正在潜入单元测试的世界。我有点迷路了。今天我了解到单元测试正在测试函数是否有效。

    我想测试以下功能:

    public function getEventById($id)
    {
        return $this->getResource('Event')->getEventById($id);
    }
    

    所以我想测试一下这个函数:

    public function test_Event_Get_Event_By_Id_Returns_Event_Item()
    {
        $p = $this->_model->getEventById(42);
        $this->assertEquals(42, EventManager_Resource_Event_Item_Interface);
        $this->assertType('EventManager_Resource_Event_Item_Interface', $p);
    }
    

    但后来我得到了错误:

    1) EventTest::test_Event_Get_Event_By_Id_Returns_Event_Item
    Zend_Db_Table_Exception: No adapter found for EventManager_Resource_Event
    
    /home/user/Public/ZendFramework-1.10.1/library/SF/Model/Abstract.php:101
    /var/www/nrka2/application/modules/eventManager/models/Event.php:25
    

    但后来有人告诉我,我目前正在进行单元测试,而不是进行集成测试。所以我想我必须以不同的方式测试函数getEventByID。但我不明白怎么做。 此函数的作用是:只计算资源并按ID返回事件。

    1 回复  |  直到 16 年前
        1
  •  3
  •   ircmaxell    16 年前

    好吧,一种方法是重载正在测试的对象。然后可以重写getresource()方法以返回“mock”对象(一个始终具有确定性的行为,并且可以为每个测试“设置”)。诀窍是隔离您想要测试的功能,并删除可能妨碍您测试的任何依赖项(即 getResource 方法在您的情况下……

    我建议阅读一些教程(不仅仅是一个,几个),并尝试理解哲学和方法论…

    一些教程:

    Zend Developer Zone

    PHP Unit Slideshow

    Pragmatic Unit Testing (注意,这是针对C,但概念应该相同)

    DevShed