如何在Zend Framework 1.8+应用程序中开始测试我的模型?
假设我已将我的应用程序设置为开始测试.我已经测试了一个控制器,所以我知道它有效.我有我的所有控制器扩展我的ControllerTestCase.php
文件:
application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $this->bootstrap = array($this, 'appBootstrap'); parent::setUp(); } public function appBootstrap() { $this->application->bootstrap(); } public function tearDown() { Zend_Controller_Front::getInstance()->resetInstance(); $this->resetRequest(); $this->resetResponse(); $this->request->setPost(array()); $this->request->setQuery(array()); parent::tearDown(); } }
但现在我想开始测试我的模型.似乎我ModelTestCase.php
不会延伸Zend_Test_PHPUnit_ControllerTestCase
而是延伸Zend_Test_PHPUnit_ModelTestCase
,但是我知道不存在这样的类.如何开始测试我的Zend Framework模型?
ControllerTestCase
为您提供了一个基础,因为设置和拆除环境以测试控制器需要复杂的步骤.输入是模拟HTTP请求,输出呈现HTML,您需要抓取以查找预期内容.
Model更像是一个普通的旧PHP对象.设置的环境较少.接口只是对对象的方法调用.
所以我将启动一个TestCase
扩展PHPUnit的简单类TestCase
,并首先为Model类中的每个方法添加至少一个test
方法(作为空函数).最终,您的Model类中的每个方法都有许多测试方法,但创建空测试方法是避免忘记某些Model方法的好方法.
请注意,Model不是表 - 模型通常使用一个或多个Table对象.通过遵循此模式,您可以为Tables 创建模拟对象,这样您就可以运行测试套件而无需实时连接到数据库.
下面是设置模拟Table对象的示例,该对象被硬编码以从数据库返回合成数据集而不是数据集.
getMock('FooTable', array('find')); $foo->expects($this->any()) ->method('find') ->will($this->returnValue(array("id"=>"123"))); $this->_model = new MyModel(); $this->_model->setFooTable($foo); } public function testCountElements() { $this->_model->get(123); $n = $this->_model->countElements(); $this->assertEquals(1, $n); } public function testAsArray() { $this->_model->get(123); $a = $this->_model->asArray(); $this->assertType('array', $a); } public function testAddElement() { // ...etc. } public function testGetElement() { // ...etc. } }