應(yīng)用單元測試,首先要解決的是單元測試的關(guān)注點(diǎn)。
測試的關(guān)注點(diǎn)在于測試邏輯,只要有邏輯要寫測試代碼。測試的手段是驗(yàn)證所有被測試方法的所有產(chǎn)出物,包括:
1. 測試方法的返回值
2. 測試方法的執(zhí)行流程
例如:
public class DomainService {
private static TheDAO dao = new TheDAO ();
public ReturnObject findByCond(String) {
return (ReturnObject)dao.getBeanByCondition("select * from ReturnObject where cond="+ paramter, ReturnObject.class);
}
}
在對(duì)于測試findByCond方法,有兩個(gè)測試用例:
A.測傳遞給TheDAO.getBeanByCondition的參數(shù)的正確性,如果參數(shù)不是”select * from ReturnObject where cond=?”和ReturnObject.class則返回為null。
B.測返回的對(duì)象正確性。
特別是第二點(diǎn),在商業(yè)應(yīng)用上比較常見的。通常有些方法無明顯output,通常是執(zhí)行寫表操作的。對(duì)于這樣的方法是測試它的執(zhí)行流程。當(dāng)然這些方法本身包含邏輯的。
一個(gè)簡單的解決方法是利用Aclearcase/" target="_blank" >ccess Log來實(shí)現(xiàn)(雖然這樣的測試不多,而寫的case代碼也看著怪怪的)。
public class ServiceExample{
private DatabaseDao1 dao1;
private DatabaseDao2 dao2;
public void noOutputMethod(){
if(...)
dao1.update(...);
if(...)
dao2.delete();
}
}