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);
}
這麼看還真能降低耦合度先寫完測試,再寫單元,發現測試不行再改單元和測試.
這個過程現在還不知道對錯
記着看過一個問題:當測試用例變多的時候,單元的參數表改變,對測試的改變會很大.這個問題解決方法是什麼