TEST

순수 Mockito로 검증하는 방법

lby132 2024. 1. 12. 16:24

방법1

public class MailServiceTest {

    @DisplayName("메일 전송 테스트")
    @Test
    void sendMail() {
        // given
        MailSendClient mailSendClient = Mockito.mock(MailSendClient.class);
        final MailSendHistoryRepository mailSendHistoryRepository = Mockito.mock(MailSendHistoryRepository.class);

        final MailService mailService = new MailService(mailSendClient, mailSendHistoryRepository);

        Mockito.when(mailSendClient.sendEmail(anyString(), anyString(), anyString(), anyString()))
                .thenReturn(true);

        // when
        boolean result = mailService.sendMail("", "", "", "");

        // then
        assertThat(result).isTrue();
        // mailSendHistoryRepository를 save를 하는데 인자로 MailSendHistory를 준다. save라는 행위가 1번 불리는지 검증하는 메서드
        Mockito.verify(mailSendHistoryRepository, Mockito.times(1)).save(any(MailSendHistory.class));
    }
}

 

방법2

어노테이션을 사용함.

@ExtendWith(MockitoExtension.class)

클래스레벨에 Mockito를 사용해서 Mock을 만들것이라는걸 명시해주어야함.

@ExtendWith(MockitoExtension.class)
public class MailServiceTest {

    @Mock
    private MailSendClient mailSendClient;

    @Mock
    private MailSendHistoryRepository mailSendHistoryRepository;

    @InjectMocks
    private MailService mailService;

    @DisplayName("메일 전송 테스트")
    @Test
    void sendMail() {
        // given
//        MailSendClient mailSendClient = Mockito.mock(MailSendClient.class);
//        final MailSendHistoryRepository mailSendHistoryRepository = Mockito.mock(MailSendHistoryRepository.class);
//
//        final MailService mailService = new MailService(mailSendClient, mailSendHistoryRepository);

        Mockito.when(mailSendClient.sendEmail(anyString(), anyString(), anyString(), anyString()))
                .thenReturn(true);

        // when
        boolean result = mailService.sendMail("", "", "", "");

        // then
        assertThat(result).isTrue();
        // mailSendHistoryRepository를 save를 하는데 인자로 MailSendHistory를 준다. save라는 행위가 1번 불리는지 검증하는 메서드
        Mockito.verify(mailSendHistoryRepository, Mockito.times(1)).save(any(MailSendHistory.class));
    }
}

@InjectMocks은 DI같이 필요한 빈들을 인젝션을 해준다.

위 코드에서 설명을 하자면 MailService에 mailSendHistoryRepository와 mailSendClient 를 인젝션을 해준다고 생각하면 됨