【发布时间】:2013-09-16 17:28:10
【问题描述】:
我刚刚开始研究 Zend 2 应用程序的单元测试,如果这是一个愚蠢的问题,请原谅我。
假设我有一个控制器,它使用数据数组更新模型,并返回一些 JSON:
public function testAction($data){
$model = new \my\namespace\model();
$model->updateFromArray($data);
return new JsonModel(array(
'success' => true,
));
}
在这种情况下,几乎所有的实际工作都是在模型内部的 updateFromArray() 方法中完成的。控制器所做的就是调用这个方法。在为这个控制器编写单元测试时,我基本上有几个测试可以测试“testAction”可以通过特定的 URL 访问,并且该操作返回 JsonModel 的实例。
现在我知道我还需要对模型的“updateFromArray”方法进行大量单元测试,因为它包含各种验证规则等。
我的问题是,我是否将这些测试应用于控制器(即编写一个测试以获取“testAction”并向其发送大量不同的数据数组)还是通过提交大量不同的数据来直接测试模型数组直接到 updateFromArray 方法?还是两者兼有?
我希望这是有道理的!
更新
澄清一下,我应该这样测试吗:
//send lots of different requests to the controller and see if it works
class myControllerTest extends \PHPUnit_Framework_TestCase{
//some code...//
public function testWhatHappensWhenSubmitX(){
$this->request->getPost()->set('somevariable','x');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertSomething();
}
public function testWhatHappensWhenSubmitY(){
$this->request->getPost()->set('somevariable','y');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertSomething();
}
public function testWhatHappensWhenSubmitZ(){
$this->request->getPost()->set('somevariable','z');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertSomething();
}
}
或者这个:
//have lots of tests against the model
class myModelTest extends \PHPUnit_Framework_TestCase{
public function setUp(){
$this->model = new \my\namespace\model()
}
public function testWhatHappensWhenSubmitX(){
$this->$model->doSomething('x');
$this->assertSomething();
}
public function testWhatHappensWhenSubmitY(){
$this->$model->doSomething('y');
$this->assertSomething();
}
public function testWhatHappensWhenSubmitZ(){
$this->$model->doSomething('z');
$this->assertSomething();
}
}
或者,我应该两者都做吗?
【问题讨论】:
标签: php unit-testing zend-framework zend-framework2