private class MyMockObjectTestCase extends MockObjectTestCase{}
private class MyNewClass{
public boolean executeJob(Collaborator collaborator){
collaborator.executeSomeImportantFunction();
return true;
}
}
}
在 setUp() 方法內,根據為擴展 jMock-CGLIB MockObjectTestCase 對象而創建的私有內部類實例化了新 "testcase"。使用任何 jMock 功能時,這個小解決方法對于確保整個測試類為 RMock TestCase 對象十分有必要。例如,您將設定類似 testCase.once() 而不是類似 once() 的 jMock 期望,因為 TestClass 對象將擴展 RMockTestCase。
構建基于 ClassB 類的模擬對象并向其提供期望。然后您將使用它幫助實例化 RMock Collaborator 模擬對象。待測試的類是 MyNewClass 類(在這里顯示為私有內部類)。同時,其 executeJob() 方法將接收 Collaborator 對象并運行 executeSomeImportantFunction() 方法。
清單 11 和 12 分別顯示了 ClassA 和 ClassB 的代碼。ClassA 是沒有實現的簡單類,而 ClassB 顯示了闡明要點所需的最少細節。
清單 11. ClassA 類
public class ClassA{}
此類只是我使用的一個虛構類,用于強化一個要點:要模擬構造函數接收對象參數的類,有必要使用 RMock。
清單 12. ClassB 類
public class ClassB{
public ClassB(){}
public String wierdMethod(){
return "failed";
}
}
ClassB 類的 wierdMethod 將返回 failed。這是十分重要的,因為該類必須簡短地返回另一個字符串才能使測試通過。
清單 13 顯示了測試示例的最重要部分:Collaborator 類。
清單 13. Collaborator 類
public class Collaborator {
private String _string;
private ClassA _classA;
private ClassB _classB;
public Collaborator(String string, ClassA classA, ClassB classB) throws Exception{
文章來源于領測軟件測試網 http://www.kjueaiud.com/