And*_*rew 2 zend-framework zend-test
如何在Zend Framework 1.8+应用程序中开始测试我的模型?
假设我已将我的应用程序设置为开始测试.我已经测试了一个控制器,所以我知道它有效.我有我的所有控制器扩展我的ControllerTestCase.php
文件:
<?php
require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
public $application;
public function setUp()
{
$this->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();
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我想开始测试我的模型.似乎我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对象的示例,该对象被硬编码以从数据库返回合成数据集而不是数据集.
<?php
class MyModelTest extends PHPUnit_Framework_TestCase
{
protected $_model;
public function setUp()
{
$foo = $this->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.
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2390 次 |
最近记录: |