1
我不確定如何使用easymock設置這種行爲。爲了說明我創建了一個簡化的例子。 基本上,我有一個方法返回void,並拿一張地圖,我想easymock改變地圖,刪除我指定的條目。easymock設置對模擬對象方法參數的期望
假設我有以下接口:
public interface Filter{
public void filter(Map<String,String>map);
}
及以下類:
public class MyClass {
private Filter filter;
public MyClass(Filter filter) {
this.filter = filter;
}
public Map<String,String> process(Map<String,String>map) {
filter.filter(map);
return map;
}
}
我無法弄清楚如何設置此行爲:
public class MyClassTest {
/**
* Test method for {@link easy.MyClass#process(java.util.Map)}.
*/
@Test
public void testProcess() {
Map<String, String> map = new HashMap<String, String>();
map.put("one","AAA");
map.put("remove","BBB");
map.put("three","CCC");
Map<String, String> expectedRet = new HashMap<String, String>();
expectedRet.put("one","AAA");
expectedRet.put("three","CCC");
IMocksControl mockery = EasyMock.createControl();
mockery.resetToStrict();
mockery.checkOrder(true);
Filter mockFilter = mockery.createMock("filter", Filter.class);
MyClass m = new MyClass(mockFilter);
mockFilter.filter(map);
// I would like some behaviour that will remove the entry ("remove","BBB")
// how can I define that?
mockery.replay();
m.process(map);
mockery.verify();
assertEquals(expectedRet,map);
}
}
我不知道我明白你的意思,1- mockFilter沒有一個方法,這個過程被稱爲(地圖),然後2-你在哪裏設置地圖需要被分條的期望。請你澄清一下嗎? –
Charbel
@Charbel:(1)我的錯誤。我在設定期望值的同時寫了'process(map)'而不是'filter(map)'。模擬的'Filter'對象將有一個'filter'方法。 (2)就是這樣。您不需要設置過濾器最終會剝離條目的期望。這是另一個測試的關注點,被測試的類是「Filter」。在這個測試中,我們正在測試'MyClass'。理想情況下,測試應該集中在一件事情上。 –
基本上我想測試一下,無論地圖是由過濾器返回的。 MyClass.process不會改變它。 – Charbel