單元測(cè)試實(shí)踐小結(jié)[1]

字號(hào):

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