2013-03-08 162 views
0

我對編寫模擬類很新,我正在嘗試爲下面的方法編寫一個測試類,並且我無法繼續模擬方法調用「getSsnValue」。模擬一個返回void的方法

public void setFieldValue(String fieldValue) { 
    final Field<String> SSN = getSsnField(fieldValue); 

    if (SSN !=null) {  
     getSsnValue(SSN ,fieldValue); 
    } 
} 

下面是嘲諷法「getSsnField」書面測試並瞭解如何嘲笑無效方法「getSsnValue」,使這種方法不會通話「期間執行工作fine.Can任何人的幫助controller.setFieldValue(名稱);」

代碼段:

controller = EasyMock.createMockBuilder(Controller.class).addMockedMethod("getSsnField",String.class).createMock(); 
EasyMock.expect(controller.getSsnField((String)EasyMock.anyObject())).andReturn(SSN).anyTimes();     
EasyMock.replay(controller);   
controller.setFieldValue(name); 

回答

1

你是否嘲笑那些方法,因爲他們做一些繁重工作,你無法負擔在您的測試呢?我問的原因是IMO,如果你必須創建一個這樣的部分模擬來嘲笑調用同一個類的方法,那麼你可能在一個太細的級別上進行測試。換句話說,你真的需要嘲笑這些方法嗎?我也假設,如果你想嘲笑那些內部方法,那麼測試的唯一原因必須是確保如果getSsnField(fieldValue)返回一個Field,那麼getSsnValue()被調用相同的fieldValue 。

如果你想繼續下去,你需要做什麼。在EasyMock中,爲了嘲笑一個無效的方法,你不要使用expect(...);相反,您只需在您的模擬對象上調用該方法(在調用replay()之前)。這樣做會指示EasyMock創建這個void方法將被調用的期望。

Controller controller = EasyMock.createMockBuilder(Controller.class) 
    .addMockedMethod("getSsnField", String.class)// 
    .addMockedMethod("getSsnValue")// 
    .createMock(); 
Field<String> SSN = new Field<String>(); 
String name = "name"; 
EasyMock.expect(controller.getSsnField(name)).andReturn(SSN).anyTimes(); 
// Just calling the getSsnValue method on the mock sets up the expectation 
// that it must be called 
controller.getSsnValue(SSN, name); // Mocking void method here 
EasyMock.replay(controller); 
controller.setFieldValue(name); 

// This step is needed in order to enforce that all mocked methods were 
// actually called. 
EasyMock.verify(controller); 
相關問題