Java mockito模拟集
答
有几个选项:
- 投它
- 使用@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...
}
答
虽然在尼古拉斯的回答中已经很清楚地解释了你如何模拟一个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();
}
});
呃...你在说什么?! – berry120
他问是否有办法模拟for循环中的一组行为。 – Nicolas