第一次写saveTag()的测试用例是这样(想saveTag相关想了很长时间):
写测试用例时没有具体的想明白saveTag(),写出来的saveTag():
public function testSaveTag(){
$item = new Item();
$tagname = 'exp1';
$this->assertInstanceOf('Item',$item);
list($item_id,$tag_id) = ItemsController::saveTag($item,$tagname);
// get the Item just saved
$item->id = $item_id;
$item_data = $item->read();
$tagnames = array();
foreach($item_data['Tag'] as $tag){
$tagnames[] = $tag['name'];
}
$this->assertContains($tagname,$tagnames);
}写测试用例时没有具体的想明白saveTag(),写出来的saveTag():
public static function saveTag($item,$tagname){
$tag = $this->Item->Tag->findByName($tagname);
if($tag){
$this->request->data['Tag']['id'] = $tag['Tag']['id'];
$this->Item->hasAndBelongsToMany['Tag']['unique'] = false;
$item->save($this->request->data);
}
return list($item->id,$tag->id);
}而request->data又是add() action中用户提交的数据,在testSaveTag()中没法使用了.
于是再修改:
public static function saveTag($item,$tagname,$data){
$tag = $this->Item->Tag->findByName($tagname);
if($tag){
$data['Tag']['id'] = $tag['Tag']['id'];
$this->Item->hasAndBelongsToMany['Tag']['unique'] = false;
$item->save($data);
}
return list($item->id,$tag->id);
}这么看还真能降低耦合度先写完测试,再写单元,发现测试不行再改单元和测试.
这个过程现在还不知道对错
记着看过一个问题:当测试用例变多的时候,单元的参数表改变,对测试的改变会很大.这个问题解决方法是什么
本文记录了作者在编写saveTag()方法及其测试用例过程中的思考与调整,探讨了如何提高单元测试的质量和降低代码耦合度。

被折叠的 条评论
为什么被折叠?



