[Mockito & JUnit] Mock이란? 테스트시 사용하는 어노테이션

rara_kim·2022년 9월 3일
0

Spring

목록 보기
8/20
post-thumbnail

Mock이란?

객체간 의존성이 있는 객체를 대신하는 가짜 객체
개발한 프로그램을 테스트 할 경우 테스트를 수행할 모듈과 연결되는 외부의 다른 서비스나 모듈들을 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 흉내내는 가짜 모듈을 작성하여 테스트의 효용성을 높이는데 사용하는 객체이다.

Mock 객체가 필요한 순간

  • 테스트 작성을 위한 환경 구축이 어려운 경우
  • 테스트가 특정 경우나 순간에 의존적인 경우
  • 테스트 시간이 오래 걸리는 경우
  • 서버나 PC의 성능문제로 오래 걸릴 수 있는 시간을 단축하기 위해 사용

JUnit 어노테이션(annotation)

@SpringBootTest

테스트 클래스에 SpringBootTest 어노테이션을 사용하면 해당 테스트를 진행하기 위해 SpringBoot 서버 전체를 띄운다.

  • 어플리케이션 레벨 테스트시 사용한다.
    • 서버 프로그램의 환경설정, 포트, 주소 등 실행될 때의 런타임 테스트
  • 통합 테스트 수행시 적합하다.
  • 테스트 실행시 서버 어플리케이션이 실행된다.
  • 실제 구동되는 어플리케이션과 똑같은 Application Context를 로드한다.
  • 어플리케이션이 로드되기 때문에 어플리케이션에 커질 경우 속도가 느려진다.

@WebMvcTest

  • MVC를 위한 테스트
  • 대표적으로 Controller 테스트를 할 때 사용한다.
  • Request, Response를 테스트 할 수 있는 어노테이션이다.
  • Spring Security가 제공하는 로그인, 로그아웃, 세션, 필터도 자동으로 테스트 가능하다.
  • @SpringBootTest 어노테이션을 이용해도 @WebMvcTest에서 가능한 테스트는 모두 가능하지만 어플리케이션 컨텍스트를 통해 서버 앱을 전부 로드하는 것이 아닌, MVC관련 어노테이션(@Controller, @ControllerAdvice, @JsonComponent)과 Filter, WebConfigurer, HandlerMethodArgumentResolver만 로드하기 때문에 가볍다.

@DataJpaTest

  • JPA관련 테스트 설정만을 로드한다.
  • DataSource의 설정 유효성, 정상 여부, DDL, DML의 정상 수행 여부 등의 테스트가 가능하다.

@RestClientTest

  • 클라이언트의 요청을 서버가 정상적으로 수행하는지를 검증하기 위한 테스트이다.

@JsonTest

  • JSON의 직렬화, 역직렬화 등을 테스트한다.

@BeforeEach

  • 현재 클래스의 각 @Test, @RepeatedTest, @ParameterizedTest 또는 @TestFactory 메소드보다 먼저 메소드가 실행되어야 함을 의미한다.
  • 비즈니스 로직이 복잡해지고 테스트에 여러 초기화가 필요하다면 여러 개의 @BeforeEach 메소드를 만들 수 있다.
  • 다만 초기화 메소드들 사이의 실행 순서는 보장되지 않으니 순서가 필요한 경우에는 @Order어노테이션을 사용해 순서를 지정해준다.

@AfterEach

  • 현재 클래스의 각 @Test, @RepeatedTest, @ParameterizedTest 또는 @TestFactory 메소드 이후에 메소드가 실행되어야 함을 의미한다.
  • 테스트가 실패해도 수행된다.


📚참고
위키백과: 모의객체

profile
느리더라도 꾸준하게

0개의 댓글