Mockito When/Then Cookbook

Dev.Hammy·2024년 4월 1일

Mockito_Tutorial

목록 보기
6/21

1. Overview

이 요리책은 Mockito를 사용하여 다양한 예제와 사용 사례에서 동작을 구성하는 방법을 보여줍니다.

요리책의 형식은 예제에 중점을 두고 실용적이므로 불필요한 세부 정보나 설명이 필요하지 않습니다.

물론 Mockito로 테스트하는 방법에 대해 자세히 알아보려면 여기에서 다른 Mockito 기사를 살펴보세요.

우리는 이전 요리책에서 사용한 것과 동일한 구현인 간단한 목록 구현을 흉내낼 것입니다.

public class MyList extends AbstractList<String> {

    @Override
    public String get(final int index) {
        return null;
    }
    @Override
    public int size() {
        return 1;
    }
}

2. Cookbook

모의에 대한 간단한 반환 동작을 구성합니다.

MyList listMock = mock(MyList.class);
when(listMock.add(anyString())).thenReturn(false);

boolean added = listMock.add(randomAlphabetic(6));
assertThat(added).isFalse();

다른 방법으로 모의에 대한 반환 동작을 구성합니다.

MyList listMock = mock(MyList.class);
doReturn(false).when(listMock).add(anyString());

boolean added = listMock.add(randomAlphabetic(6));
assertThat(added).isFalse();

void 반환 유형으로 메서드의 동작을 구성하여 예외를 발생시킵니다.

MyList listMock = mock(MyList.class);
doThrow(NullPointerException.class).when(listMock).clear();

assertThrows(NullPointerException.class, () -> listMock.clear());

여러 통화의 동작을 구성합니다.

MyList listMock = mock(MyList.class);
when(listMock.add(anyString()))
  .thenReturn(false)
  .thenThrow(IllegalStateException.class);

assertThrows(IllegalStateException.class, () -> {
    listMock.add(randomAlphabetic(6));
    listMock.add(randomAlphabetic(6));
});

스파이의 행동을 구성합니다:

MyList instance = new MyList();
MyList spy = spy(instance);

doThrow(NullPointerException.class).when(spy).size();

assertThrows(NullPointerException.class, () -> spy.size());

모의 객체에서 실제 기본 메서드를 호출하도록 메서드를 구성합니다.

모의 객체에서 실제 기본 메서드를 호출하도록 메서드를 구성합니다.

사용자 정의 답변으로 모의 메서드 호출을 구성합니다.

MyList listMock = mock(MyList.class);
doAnswer(invocation -> "Always the same").when(listMock).get(anyInt());

String element = listMock.get(1);
assertThat(element).isEqualTo("Always the same");

0개의 댓글