첫 번째 호출은 실패하고 두 번째 호출은 성공하는 시뮬레이션
Mockito를 사용하여 아래의 (단순화 된) 코드를 테스트하고 싶습니다. Mockito에게 처음에는 실패하고 두 번째는 성공하라고 말하는 방법을 모르겠습니다.
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
다음을 사용하여 성공 테스트를 접근 할 수 있습니다.
Mockito.when(myMock).doTheCall().thenReturn("Success");
그리고 실패 테스트 :
Mockito.when(myMock).doTheCall().thenReturn("you failed");
그러나 한 번 (또는 두 번) 실패하면 성공하는지 어떻게 테스트 할 수 있습니까?
에서 워드 프로세서 :
동일한 메서드 호출에 대해 다른 반환 값이 필요합니다. 일반적인 사용 사례는 반복적으로 조롱하는 것입니다. Mockito의 원래 버전에는 단순한 조롱을 촉진하는 기능이 없습니다.예를 들어 반복자 대신 Iterable 또는 컬렉션을 사용할 수 있습니다. 자연스러운 스터 빙 방법을 제공합니다 (예 : 실제 컬렉션 사용). 드물지만 연속 호출을 스터 빙하는 것이 유용 할 수 있습니다.
when(mock.someMethod("some arg")) .thenThrow(new RuntimeException()) .thenReturn("foo"); //First call: throws runtime exception: mock.someMethod("some arg"); //Second call: prints "foo" System.out.println(mock.someMethod("some arg"));
따라서 귀하의 경우에는 다음을 원할 것입니다.
when(myMock.doTheCall())
.thenReturn("You failed")
.thenReturn("Success");
원하는 것을 쓰는 가장 짧은 방법은
when(myMock.doTheCall()).thenReturn("Success", "you failed");
이와 thenReturn
같이 여러 개의 인수를 제공하면 필요한만큼 여러 번 사용되는 마지막 인수를 제외하고 각 인수는 최대 한 번만 사용됩니다. 예를 들어,이 경우 네 번 전화를 걸면 "성공", "실패", "실패", "실패"가 표시됩니다.
이와 관련된 댓글은 읽기 어렵 기 때문에 형식화 된 답변을 추가하겠습니다.
예외를 발생시키는 무효 함수를 사용하여 동작을 수행하고 그 작업을 수행 할 때 다음과 같이 수행합니다.
Mockito.doThrow(new Exception("MESSAGE"))
.doNothing()
.when(mockService).method(eq());
에 추가하려면 이 와 이 대답, 당신은 또한 체인에 조롱 전화를 루프를 사용할 수 있습니다. 이것은 같은 것을 여러 번 조롱하거나 어떤 패턴으로 조롱해야 할 때 유용합니다.
예 (파 페치 된 것임에도 불구하고) :
import org.mockito.stubbing.Stubber;
Stubber stubber = doThrow(new Exception("Exception!"));
for (int i=0; i<10; i++) {
if (i%2 == 0) {
stubber.doNothing();
} else {
stubber.doThrow(new Exception("Exception"));
}
}
stubber.when(myMockObject).someMethod(anyString());
상황이 다르기 void
때문에 첫 번째 호출에 대한 함수 를 모의 하고 두 번째 호출에서 정상적으로 실행하고 싶었습니다 .
이것은 나를 위해 작동합니다.
Mockito.doThrow(new RuntimeException("random runtime exception")).doCallRealMethod().when(object).method(Mockito.any());
참고 URL : https://stackoverflow.com/questions/11785498/simulate-first-call-fails-second-call-succeeds
'IT' 카테고리의 다른 글
양식의 clean () 메소드에서 요청 또는 다른 변수에 어떻게 액세스합니까? (0) | 2020.08.31 |
---|---|
JavaScript에서 파일 열기 대화 상자 (0) | 2020.08.31 |
dd / mm / yyyy 형식의 페이지를 Datetime으로 변환 (0) | 2020.08.31 |
AppCompatActivity에서 기호 ViewModelProviders를 확인할 수 없습니다. (0) | 2020.08.31 |
Fragments에서 setArguments () 및 getArguments () 메서드를 사용하는 방법은 무엇입니까? (0) | 2020.08.31 |