2011-08-25 152 views

回答

10

有幾個選項:

  1. 投它
  2. 使用@Mock註釋

例子:

Set<String> mySet = (Set<String>) mock(Set.class); 

- 或 -

@Mock 
private Set<String> mySet; 

@Before 
public void doBefore() throws Exception { 
    MockitoAnnotations.initMocks(this.getClass()); //this should create mocks for your objects... 
} 
5

雖然在尼古拉斯的回答中已經很清楚地解釋了你如何模擬一個Set,但我認爲你的問題也意味着你想在模擬循環過程中模擬這個set的行爲。

爲了實現這一目標,你首先需要知道你的代碼只是語法糖,並擴展爲:

for (Iterator iterator = mySet.iterator(); iterator.hasNext();) { 
    String key = (String) iterator.next(); 
    ... 
} 

(有關見#1問題Which is more efficient, a for-each loop, or an iterator?細節)

這清楚地表明你需要嘲笑iterator()方法。在你設置nikolas所描述的模擬模擬迭代器的方法是這樣的:

when(mySet.iterator()).thenAnswer(new Answer<Iterator<String>>() { 
    @Override 
    public Iterator<String> answer(InvocationOnMock invocation) throws Throwable { 
     return Arrays.asList("A", "B").iterator(); 
    } 
});