@SpringBootTest

HyeonWoo·2020년 12월 10일
0

스프링 & JPA

목록 보기
6/34
post-thumbnail

이번 장에서는 프로그램의 무결성을 보장하고 코드 품질을 향상시키는데 중요한 테스트 코드 관련 어노테이션을 알아 보고자 한다.


스프링 부트에서는 기본적인 테스트 스타터를 제공한다

각종 테스트를 위한 어노테이션 기반 기능을 제공하여 특정 주제에 맞게 테스트를 구현하고 관리할 수 있다.

spring-boot-starter-test

아래에서 다양한 어노테이션을 알아 보도록 하자.


@SpringBootTest

  • 통합 테스트를 제공하는 기본적인 스프링 부트 테스트 어노테이션.
  • 애플리케이션이 실행될 때의 설정을 임의로 바꾸어 테스트를 진행, 여러 단위 테스트를 하나의 통합된 테스트로 수행할 때 적합

장점

  • 애플리케이션의 설정, 모든 Bean을 모두 로드하기 때문에 운영환경과 가장 유사한 테스트가 가능
  • 전체적인 플로우를 쉽게 테스트 가능

단점

  • 애플리케이션에 설정된 빈을 모두 로드하기 때문에 애플리케이션 규모가 클수록 느려짐, 이렇게되면 단위 테스트라는 의미가 희석됨.
  • 디버깅이 어려움

예전에는 프로젝트를 생성하면 아래와 같이 기본으로 제공되는 테스트 코드가 생성 되었다.

하지만 Junit5부터 @RunWith 어노테이션 -> @ExtendWith 어노테이션을 사용하게 된다.
@Runwith 어노테이션에 비해 몇 가지 중요한 차이가 있는데 메타 어노테이션을 지원하고, 여러번 중복 사용할 수 있는 점이다.


(메타 어노테이션 )

예를 들어서 스프링에서 빈을 주입하고자 하면 @Component 어노테이션을 지정해야 한다. 하지만 컨트롤러, 서비스, DAO 클래스 같은 경우에는 @Controller, @Service, @Repository 어노테이션만 붙혀준다.
위 3가지 어노테이션으로도 빈을 주입할 수 있다.
그 이유는 @Controller 어노테이션 안에는 @Component 어노테이션이 달라 붙어 있기 때문이다
그래서 @Component 어노테이션을 메타 어노테이션이라고 부른다.


다시 본론으로 돌아오자면,

최근 스프링 부트는 Junit5를 사용하기 때문에 메타 애노테이션으로 적용되어 있어 위의 사진과 같이 @RunWith(SpirngRunner.class) 가 생략 되어있다.
아래 사진처럼 SpringBootTest 어노테이션에 포함되어있는 것을 볼 수 있다.


다음으로 @SpringBootTest 어노테이션의 파라미터를 알아보자.

  • value: 테스트가 실행되기 전에 적용할 프로퍼티를 주입 시킬 수 있다. 즉, 기존의 프로퍼티를 오버라이드한다.
  • properties : 테스트가 실행되기 전에 {key: value} 형식으로 프로퍼티를 추가 할 수 있음.
  • classes : 애플리케이션 컨텍스트에 로드할 클래스를 지정 할 수 있음. 따로 지정하지 않으면 @SpringBootConfiguration을 찾아서 로드함.
  • webEnvironment: 애플리케이션이 실행될 때의 웹 환경을 설정할 수 있음. 기본 값은 Mock 서블릿을 로드하여 구동되며 예제에서는 랜덤 포트값을 주어 구동 시킴.

참고자료
https://www.whiteship.me/springboot-no-more-runwith/
처음배우는 스프링부트2

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글