Php 关于单元测试zend框架中的函数和一般的单元测试

Php 关于单元测试zend框架中的函数和一般的单元测试,php,unit-testing,zend-framework,phpunit,Php,Unit Testing,Zend Framework,Phpunit,我正潜入单元测试的世界。我有点迷路了。今天我学到了单元测试就是测试函数是否工作 我想测试以下功能: public function getEventById($id) { return $this->getResource('Event')->getEventById($id); } 所以我想测试这个函数,如下所示: public function test_Event_Get_Event_By_Id_Returns_Event_Item() { $p = $thi

我正潜入单元测试的世界。我有点迷路了。今天我学到了单元测试就是测试函数是否工作

我想测试以下功能:

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返回事件。

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

我建议你阅读一些教程(不仅仅是一本或几本),试着理解其中的哲学和方法论

一些教程:

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


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

我建议你阅读一些教程(不仅仅是一本或几本),试着理解其中的哲学和方法论

一些教程:

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


谢谢您提供的所有信息。我需要这么多的阅读!谢谢你提供的所有信息。我需要这么多的阅读!