반응형
이 포스팅에서 작성하는 내용은 더 자바, 애플리케이션을 테스트하는 다양한 방법 에서 발췌하였습니다.
https://inf.run/CpvH
Mockito
- Mock 객체를 쉽게 만들어서 관리하고 검증을 도와주는 프레임워크.
- Mock : 진짜 객체를 만들어 사용하기에 시간, 비용이 많이 들거나 객체간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법
설정 방법
- 스프링 부트 2.2 이상을 사용한다면, 기본적으로 라이브러리에 추가되어 있음.
- 직접 의존성을 추가해야되는 경우, 아래와 같이 추가
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>
Mockito 객체 생성
Mock 객체의 특징
- Null을 반환 (Optional 객체일 경우, Optional.empty)
- Primitive 타입인 경우 해당 타입의 기본 값으로 반환 (int의 경우, 0)
- Collection 인 경우 비어있는 Collection 으로 반환
- void 메서드는 예외를 던지지 않고 아무 일도 발생시키지 않음
1) Mockito.mock()
import org.mockito.Mock;
class test {
// Mockito.mock 사용 (@Mock 어노테이션 없이도 가능)
Cat cat = mock(cat.class);
...
}
2) @Mock
- @Mock 을 사용하기 위해서는 @ExtendWith(MockitoExtension.class) 를 사용해야만 한다.
- @Mock Cat cat 을 메서드의 파라미터로 그대로 넣어줄 수 있다.
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
class test {
@Mock Cat cat;
...
}
Mockito Stubbing
- Mock 객체에 약속을 걸어서, 특정 상황의 경우에 특정 행동을 하도록 설정하는 기능
- 특정한 파라미터를 받은 경우, 특정한 값을 반환하거나 예외 발생 가능
- void 메서드에 특정 파라미터를 받거나 호출된 경우, 예외 발생 가능
- 메서드가 동일한 파라미터로 여러번 호출되는 경우, 각각 다르게 행동되도록 설정 가능
@Test
void createCat(@Mock CatService catService) {
Cat cat = new Cat();
cat.setId(1L);
cat.setAge(2);
// 1L 이라는 ID로 findById를 하라고 했을 때, cat 변수를 반환
when(catService.findById(1L)).thenReturn(cat);
// 만약, any()를 사용하면 특정 파라미터가 아닌 모든 파라미터에 대해 적용
when(catService.findById(any())).thenReturn(cat);
// catService의 validate라는 메서드를 1L 파라미터로 호출했을 때 IllegalArgumentException 을 호출하도록 설정
doThrow(new IllegalArgumentException()).when(catService).validate(1L);
}
추가) verify 메서드를 이용해서, 특정 메서드가 몇 번 실행됐는 지도 검증이 가능하다.
반응형
'BE > Java' 카테고리의 다른 글
[Java 8] 람다 표현식과 메서드 레퍼런스 (0) | 2023.04.12 |
---|---|
[Java 8] Java 8과 함수형 인터페이스 (0) | 2023.04.11 |
[Java] Jar파일에 있는 파일 읽기 (0) | 2023.03.31 |
[Java] Enum to String & String to Enum (0) | 2023.03.09 |
[Junit 5] 확장 모델 (0) | 2023.02.15 |