Возможна установка макета после использования в цикле, например.
for(String key: mySet) { ...}
Спасибо.
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...
}
Хотя в ответе Николаса совершенно ясно объясняется, как вы имитируете Set, я думаю, что ваш вопрос также подразумевает, что вы хотите издеваться над поведением набора во время цикла.
Для этого вам сначала нужно знать, что ваш код является только синтаксическим сахаром и расширяется до:
for (Iterator iterator = mySet.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
...
}
(Подробнее об этом см. В вопросе 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();
}
});
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].