Mockito Verify Cookbook

Dev.Hammy·2024년 4월 1일

Mockito_Tutorial

목록 보기
7/21

1. Overview

이 요리책은 다양한 사용 사례에서 Mockito 검증을 사용하는 방법을 보여줍니다.

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

우리는 간단한 list 구현을 흉내낼 것입니다:

public class MyList extends AbstractList<String> {

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

2. The Cookbook

모의에서 간단한 호출을 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.size();

verify(mockedList).size();

모의와의 상호작용 수를 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, times(1)).size();

전체 모의 객체와의 상호 작용이 발생하지 않았는지 확인합니다.

List<String> mockedList = mock(MyList.class);
verifyNoInteractions(mockedList);

특정 메소드와의 상호작용이 발생하지 않았는지 확인하십시오.

List<String> mockedList = mock(MyList.class);
verify(mockedList, times(0)).size();

예상치 못한 상호 작용이 없는지 확인합니다. 이 작업은 실패합니다.

List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.clear();

verify(mockedList).size();
assertThrows(NoInteractionsWanted.class, () -> verifyNoMoreInteractions(mockedList));

상호작용 순서를 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();

InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();

상호작용이 발생하지 않았는지 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.size();

verify(mockedList, never()).clear();

상호작용이 특정 횟수 이상 발생했는지 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.clear();
mockedList.clear();
mockedList.clear();

verify(mockedList, atLeast(1)).clear();
verify(mockedList, atMost(10)).clear();

정확한 인수와의 상호 작용을 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.add("test");

verify(mockedList).add("test");

유연한/모든 인수와의 상호 작용을 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.add("test");

verify(mockedList).add(anyString());

인수 캡처를 사용하여 상호 작용을 확인합니다.

List<String> mockedList = mock(MyList.class);
mockedList.addAll(Lists.<String> newArrayList("someElement"));

ArgumentCaptor<List<String>> argumentCaptor = ArgumentCaptor.forClass(List.class);
verify(mockedList).addAll(argumentCaptor.capture());

List<String> capturedArgument = argumentCaptor.getValue();
assertThat(capturedArgument).contains("someElement");

0개의 댓글