2011-08-25 85 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(); 
    } 
});