2014-10-02 2 views
19

에 전달로의 내가 어떤 서비스 클래스에서 다음과 같은 방법을 상상하자 같은 객체를 반환 다음과 같은 방법으로 :Mockito 방법

when(repository.merge(any(SomeEntity.class))).thenReturn(objectPassedAsArgument); 

그런 조롱 저장소 반환 makesSthWithEntity가 건네 나는 쉽게 테스트 할 수 있다는 것.

어떻게하면 모키토를 강제로 되돌릴 수 있습니까? objectPassedAsArgument?

+0

당신은 (repository.merge (any (SomeEntity.class))). then return (entity); ? –

답변

17

Answer을 구현 한 다음 thenAnswer()을 대신 사용할 수 있습니다. 유사

뭔가 : 당신이 일단 물론

when(mock.someMethod(anyString())).thenAnswer(new Answer() { 
    Object answer(InvocationOnMock invocation) { 
     return invocation.getArguments()[0]; 
    } 
}); 

, 당신은 재사용 가능한 대답에 답을 리팩토링 할 수는 ReturnFirstArgument 또는 유사했다.

+9

이미 mockito에 존재합니다 :'AddtionalAnswers.returnsFirstArg()' – Brice

+1

'thenAnswer (i-> i.getArguments() [0])'로 코드를 줄여도됩니다. 좋은 해결책, 그리고 BTW'AddtionalAnswers.returnsFirstArg()'는 나에게 약간의 오류를주고있다. – EliuX

40

또는 더 나은 사용 mockito 제공 답변

AdditionalAnswers.returnsFirstArg()이 정적으로 가져올 수
when(mock.something()).then(AdditionalAnswers.returnsFirstArg()) 

.

+1

니스! 나는 이것이 "returnSecondArg"를 염두에 두지 않을 정도로 충분히 일반적인 것으로 기대하지 않았다. 나는 또한'then()'별칭을 사용하는 것을 좋아한다. –

+0

예;) 사용자 정의 답변을위한 정적 팩토리 메소드와 함께 사용할 때 읽기 쉽도록 'then'별칭을 추가했습니다. – Brice

+0

@MarkPeters,'AdditionalAnswers'는 "덜 일반적인 대답"을위한 것입니다. 문서에 따르면 – smac89