개요
MockBean을 사용하면 스프링 컨테이너의 빈이 MockBean으로 대체되어 사용된다.
이와 반대로 단위 테스트를 진행하기 위해 스프링 컨테이너를 실행하기엔 무거울 수 있어 Mock을 사용한다.
즉 Mock은 스프링과 무관하며, 그저 단순한 Mock객체를 만들어주는 어노테이션이기 때문에 스프링 컨텍스트에는 실제 객체가 Bean으로 남아있게 된다.
사용법
1. 아래의 코드와 같이 Mock을 만들 클래스 타입을 Mockito.mock의 인자로 넣어주면 된다.
MailSendClient = mailSendClient = Mockito.mock(MilSendClient.class);
MailService mailService = new MailSerivce(mailSendClient);
when(mailSendClient.sendEmail(anyString()).thenReturn(true);
2. @Mock을 사용하면 1번 방법과 동일한 효과를 적용할 수 있다.
그러기 위해선 테스트클래스 위에 @ExtendWith(MockitoExtension.class)를 추가해 주면 된다.
@ExtendWith(MockitoExtension.class)
class MailServiceTest {
@Mock
private MailSendClient mailSendClient;
@InjectMocks
injectMocks를 사용하면 생성자를 통해 필요한 의존관계를 자동으로 주입시켜준다.
@InjectMocks
private MailService mailService;
@Spy
만약 테스트에 사용하는 클래스의 모든 함수를 Mock 하는 경우가 아닌 사용자가 선택해서 테스트를 진행하고 싶은 경우 사용한다.
지정한 함수 말고는 기본의 코드대로 수행된다.
@Spy
private MailSendClient mailSendClient;
doReturn(true)
.when(mailSendClient)
.sendEmail(anyString(), anyString(), anyString(), anyString());
mailsendClient의 sendEmail함수만 Mock 된 것처럼 호출 시 true를 리턴하고 나머지 함수는 기존의 코드와 같게 수행된다.
'TestCode' 카테고리의 다른 글
classicist vs mockist (0) | 2024.07.17 |
---|---|
Mockito.verify (0) | 2024.07.16 |
JUnit 예외 상황 테스트 하기 (0) | 2024.07.15 |
JUnit 객체의 필드 값 확인하기 (0) | 2024.07.15 |
Mockito 사용하기 (0) | 2024.07.13 |