Mockito Strict Stubbing and The UnnecessaryStubbingException

Strict Stubbing

Mockito 2.x 버전 이후로 다음의 사유로 strictness 개념이 등장한다.

Mockito의 기본 stubbing전략은 strict이다.

UnnecessaryStubbingException

테스트 실행 중에 실현되지 않은 스텁 메서드가 있는 경우 UnnecessaryStubbingException이 발생한다.

@Test
public void givenUnusedStub_whenInvokingGetThenThrowUnnecessaryStubbingException() {
    when(mockList.add("one")).thenReturn(true); // this won't get called
    when(mockList.get(anyInt())).thenReturn("hello");
    assertEquals("List should contain hello", "hello", mockList.get(1));
}

Bypassing Strict Stubbing

lenient()을 사용하여 우회할수 있다.

@Test
public void givenLenientdStub_whenInvokingGetThenThrowUnnecessaryStubbingException() {
    lenient().when(mockList.add("one")).thenReturn(true);
    when(mockList.get(anyInt())).thenReturn("hello");
    assertEquals("List should contain hello", "hello", mockList.get(1));
}

Reference