_string = string;
_classA = classA;
if(classB.wierdMethod().equals("passed")){
_classB =classB;
}
else{
throw new Exception("Something bad happened");
}
}
public void executeSomeImportantFunction(){
}
}
注,首要的是,使用 jMock 框架模擬了 ClassB 類。使用 RMock,沒有一種實際方法從模擬對象中提取和使用代理,以便在測試 setUp() 方法中的其他位置使用該代理。使用 RMock,僅當調用 startVerification() 方法之后,才顯示代理對象。本例中的優點是使用 jMock,因為在需要返回自我模擬對象的情況下,可以 獲得設置其他模擬對象所需的信息。
反過來,需要注意的第二點是您不能使用 jMock 框架來模擬 Collaborator 類。原因是該類沒有無參數構造函數。此外,在構造函數內有某種邏輯,這種邏輯將確定是否先獲得實例。事實上,出于本次討論的目的,ClassB 中的 wierdMethod() 方法必須返回 passed 才能使 Collaborator 對象被實例化。但是,另請注意,在默認情況下,方法總是返回 failed。測試成功明顯需要模擬 ClassB。
此外,不同于先前的示例,此場景中的類數組作為附加參數被包含到了 intercept() 方法中。對此不作嚴格要求,但是用它作為密鑰可以快速識別在實例化 RMock 測試對象時使用的對象類。
運行新測試用例。這一次,您將看到成功的結果。圖 7 將顯示令人愉快的結果。
圖 7. RMock 與 jMock 協作使場景 4 測試成功
文章來源于領測軟件測試網 http://www.kjueaiud.com/