Java mockito模拟集

use*_*818 8 java set mockito

可以在循环中使用后进行模拟设置,例如

for(String key: mySet) { ...}
Run Code Online (Sandbox Code Playgroud)

谢谢.

nic*_*ild 12

有几种选择:

  1. 投吧
  2. 使用@Mock注释

例子:

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)


leo*_*leo 6

虽然在尼古拉斯的回答中非常清楚地解释了如何模拟一个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)