Junit과 Mockito 기반의 Spring 단위 테스트 코드 작성법

sckwon770·2023년 10월 30일
0

스프링 부트

목록 보기
6/10

이전 노션 블로그의 Junit과 Mockito 기반의 Spring 단위 테스트 코드 작성법 (2023.03.13)로부터 마이그레이션된 글입니다.

Mockito 소개 및 사용 방법

Mockito란

개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크다. 일반적으로 Spring을 개발하면 여러 객체들 간의 의존성이 생긴다. 이러한 의존성은 단위 테스트 작성을 어렵게 하는데, 이를 해결하기 위해 Mockito를 활용할 수 있다. Mock 객체를 주입시키고 원하는 결과를 stub하여 단위 테스트를 진행할 수 있다. 물론 Mock을 하지 않아도 된다면 하지 않는 것이 가장 좋다.

사용법

  1. Mock 객체 의존성 주입

Mockito에서 Mock 객체의 의존성 주입을 위해서는 크게 3가지 어노테이션이 사용된다.

  • @Mock : 가짜 객체. (Stubbing하지 않고 호출하면, 0 or null 반환)
  • @Spy : 진짜 객체. Stubbing할 수도 있고, Stubbing하지 않은 메소드는 원본대로 동작)
  • @InjectMocks : @Mock 또는 @Spy 로 생성한 Mock객체를 주입받음.

예를들어 UserController 에 대한 단위 테스트를 작성하고자 할 때, UserService 를 사용하고 있다면 @Mock 어노테이션을 통해 가짜 UserService 를 만들고, @InjectMocks 를 통해 UserController 에 이를 주입시킬 수 있다.

  1. Stub로 결과 처리

의존성이 있는 객체는 Mock 객체를 주입하여 어떤 결과를 반환하라고 정해진 답변을 준비시켜야 한다. Mockito에서는 다음의 stub 메소드들을 제공한다.

  • doReturn() : Mock 객체가 특정한 값을 반환해야 하는 경우
  • doNothing() : Mock 객체가 아무것도 반환하지 않는 경우 (void)
  • doThrow() : Mock 객체가 예외를 발생시키는 경우
  1. Mockto와 Junit의 결합
  • Junit4 : 클래스 어노테이션 @RunWith(MockitoJUnitRunnerclass)
  • Juinit5 : 클래스 어노테이션 @ExtendWith(MockitoExtension.class)

실습 예제

구체적인 예제는 다음을 참고하자

profile
늘 학습하고 적용하고 개선하는 개발자

0개의 댓글