2014-01-29 3 views
0
@Mock 
Object obj; 

List<Obejct obj> objs; 

Как получить макет объекта obj назад, когда я перебираю objs?Mockito: как получить фиктивный объект при переходе списка?

+0

Посмотрите на [этот пост] (http://whyjava.wordpress.com/2012/03/11/quick-tip-on-mockito-mocking-iterator/) – eebbesen

+0

Если у вас нет определенной причины не используйте реальный «Список» (например, он обязательно большой в небольшом модульном тесте), используйте реальный «Список» и добавьте в него макет объектов. Коллекции Java хорошо определены и хорошо протестированы, поэтому вам не нужно их издеваться. –

+0

Этот ответ тоже очень полезен. Https://stackoverflow.com/a/43067304/3800377 –

ответ

1

Код:

@Mock 
private Iterator<YourObject> iteratorMock; 
//... 
when(yourListMock.iterator()).thenReturn(iteratorMock); 
when(iteratorMock.hasNext()).thenReturn(Boolean.TRUE, Boolean.TRUE, 
    Boolean.TRUE, Boolean.FALSE); 
when(iteratorMock.next()).thenReturn(yourMock1, yourMock1, yourMock2); 

Как вы можете видеть в коде, насмешливый итератор очень удобный способ вернуть различные издевается для второго, третьего e.t.c вызова.

Таким образом, вы также можете очень легко получить второй вызов, чтобы исключить и третий вызов снова работать, имея возможность проверить, что исключение второго вызова будет обрабатываться, например, и третий результат все равно будет обработан.

Использование настоящего списка - это вариант, но я думаю, что насмехание более мощное и код более сгущен до того, что вам действительно нужно для конкретного теста.

Смежные вопросы