可以在循环中使用后进行模拟设置,例如
for(String key: mySet) { ...}
Run Code Online (Sandbox Code Playgroud)
谢谢.
nic*_*ild 12
有几种选择:
例子:
Set<String> mySet = (Set<String>) mock(Set.class);
Run Code Online (Sandbox Code Playgroud)
- 要么 -
@Mock
private Set<String> mySet;
@Before
public void doBefore() throws Exception {
MockitoAnnotations.initMocks(this.getClass()); //this should create mocks for your objects...
}
Run Code Online (Sandbox Code Playgroud)
虽然在尼古拉斯的回答中非常清楚地解释了如何模拟一个Set,但我认为你的问题也暗示你想要在循环期间模拟集合的行为.
要实现这一点,首先需要知道您的代码只是语法糖并扩展为:
for (Iterator iterator = mySet.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
...
}
Run Code Online (Sandbox Code Playgroud)
(有关详细信息,请参阅Stackoverflow问题哪个更有效,for-each循环或迭代器?)
这清楚表明您需要模拟该iterator()方法.按照尼古拉斯的描述设置模拟后,你就像这样模拟迭代器方法:
when(mySet.iterator()).thenAnswer(new Answer<Iterator<String>>() {
@Override
public Iterator<String> answer(InvocationOnMock invocation) throws Throwable {
return Arrays.asList("A", "B").iterator();
}
});
Run Code Online (Sandbox Code Playgroud)