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

List<Obejct obj> objs; 

objs을 반복 할 때 모의 객체 obj를 다시 얻는 방법은 무엇입니까?Mockito : 목록을 반복 할 때 모의 객체를 얻는 방법?

+0

[this post] (http://whyjava.wordpress.com/2012/03/11/quick-tip-on-mockito-mocking-iterator/) – eebbesen

+0

다음과 같은 특별한 이유가 있지 않는 한 실제'List' (예를 들어, 작은 단위 테스트에서 반드시 커야합니다)를 사용하고, 실제'List'를 사용하여 모의 객체를 추가하십시오. Java 콜렉션은 잘 정의되고 잘 테스트되어 있으므로 모방 할 필요가 없습니다. –

+0

그 대답은 매우 유용합니다. https://stackoverflow.com/a/43067304/3800377 –

답변

1

코드 :이 코드에서 볼 수 있듯이, 반복자를 조롱하는 것은 두 번째, 세 번째, e.t.c 호출에 대해 서로 다른 모의 객체를 반환하는 매우 편리한 방법이다

@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); 

.

이 방법을 사용하면 두 번째 호출에서 예외가 발생하고 세 번째 호출이 다시 작동하므로 두 번째 호출의 예외가 처리되고 세 번째 결과가 여전히 처리된다는 것을 테스트 할 수 있습니다.

실제 목록을 사용하는 것이 좋습니다.하지만 조롱은 더 강력하고 특정 테스트에 실제로 필요한 코드가 더 압축되어 있다고 생각합니다.

관련 문제