Java

Mockito란 무엇인가?

Mulenga 2023. 3. 2. 07:26
728x90

 

  Mockito는 자바 언어를 사용하는 소프트웨어 개발자들이 단위 테스트를 작성하는 데 사용하는 오픈 소스 프레임워크이다. Mockito는 단위 테스트를 작성할 때 모의 객체(Mock Object)를 생성하고 관리하는 데 사용된다.

 

  모의 객체는 실제 객체와 비슷하지만, 프로그래머가 직접 제어할 수 있는 가짜 객체이다. 모의 객체는 실제 객체를 사용하는 경우에 발생할 수 있는 여러 가지 문제를 방지할 수 있다. 예를 들어, 외부 서비스나 데이터베이스와 같은 리소스를 사용하는 객체의 경우, 실제 리소스에 대한 의존성을 제거하고 테스트를 수행할 수 있다.

 

Mockit의 기능

 

- 모의 객체 생성: Mockito는 자동으로 모의 객체를 생성하고, 객체의 메서드 호출을 기록하고, 호출 횟수와 인자를 확인하는 기능을 제공한다.

 

- 메서드 호출 검증: Mockito는 모의 객체에서 메서드가 호출될 때 이를 검증하는 기능을 제공한다. 예를 들어, 메서드가 특정한 매개 변수 값으로 호출되었는지를 확인할 수 있다.

 

- 스텁(Stub) 기능: Mockito는 모의 객체에서 메서드가 호출될 때 반환되는 값을 프로그래머가 직접 지정할 수 있도록 스텁 기능을 제공한다.

 

- Mock 객체 간 연결: Mockito는 여러 개의 모의 객체를 연결하여 하나의 테스트에서 여러 객체를 사용할 수 있도록 지원한다.

 

Mockito는 다양한 자바 프레임워크와 라이브러리와 호환된다. 예를 들어, JUnit과 함께 사용하면 편리하게 단위 테스트를 수행할 수 있다. Mockito는 많은 개발자들에게 인기 있는 모의 객체 프레임워크 중 하나이며, 단위 테스트 작성을 보다 쉽고 유연하게 해준다.

 

Mockito 함수와 어노테이션

 

1. 어노테이션

@Mock: 모의 객체(Mock Object)를 쉽게 생성한다.

@Spy: 실제 객체(Real Object)를 사용하여 모의 객체를 생성한다.

@InjectMocks: 주입할 대상 객체(Inject Target)의 생성자를 호출하여 모의 객체를 자동으로 주입한다.

@Captor: 모의 객체에서 호출된 메서드의 인자를 캡처한다.

@RunWith: 테스트 실행 방법을 지정한다.

 

2. 함수

- mock(): 모의 객체(Mock Object)를 생성한다.

- when(): 모의 객체에서 메서드가 호출될 때 반환되는 값을 지정한다.

- verify(): 모의 객체에서 호출된 메서드가 기대한 대로 호출되었는지 확인한다.

- any(): 모든 인자를 대체하는 Matcher이다..

- argumentCaptor(): 모의 객체에서 호출된 메서드의 인자를 캡처한다.

 

예시코드

import static org.mockito.Mockito.*;
import static org.mockito.ArgumentMatchers.*;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.ArgumentCaptor;
@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {

@Mock
List<String> mockedList;

@Spy
List<String> spiedList = new ArrayList<>();

@InjectMocks
MyService myService;

@Captor
ArgumentCaptor<String> argCaptor;

@Test
public void testMock() {

when(mockedList.size()).thenReturn(2);

int size = mockedList.size();

verify(mockedList).size();

assertEquals(2, size);

}



@Test
public void testSpy() {

spiedList.add("item");

verify(spiedList).add("item");

assertEquals(1, spiedList.size());

}

@Test
public void testInjectMocks() {

when(mockedList.size()).thenReturn(2);

int size = myService.getSize();

verify(mockedList).size();

assertEquals(2, size);

}

@Test
public void testCaptor() {

mockedList.add("item");

verify(mockedList).add(argCaptor.capture());

assertEquals("item", argCaptor.getValue());

}
}

  위 코드에서는 @Mock, @Spy, @InjectMocks, @Captor 어노테이션을 사용하여 각각 모의 객체(Mock Object), 실제 객체(Real Object), 주입할 대상 객체(Inject Target), 인자를 캡처할 객체를 생성한다. 또한, when(), verify(), any(), argumentCaptor() 함수를 사용하여 각각 모의 객체에서 메서드 호출을 지정하고 검증하며, 인자를 대체하고 캡처한다. 이렇게 Mockito에서 제공하는 어노테이션과 함수를 사용하면 보다 쉽게 모의 객체를 생성하고, 단위 테스트를 작성할 수 있다.

 

'Java' 카테고리의 다른 글

<JAVA> Optional객체  (0) 2023.04.20
<JAVA> LocalDateTime 사용법  (0) 2023.04.13
JUnit5란 무엇인가?  (0) 2023.03.01
<JAVA> Stream sorted 메서드  (0) 2023.01.24
<JAVA> Stream Map메서드  (0) 2023.01.23