Spring/Introduction to Spring

스프링 통합 테스트

민철킹 2021. 2. 20. 18:47

@Transactional

  • 테스트를 할 때 이 애노테이션을 달면 트랜잭션을 먼저 실행하고 테스트를 실행한 후에(DB insert 등등) 마지막에 Rollback을 해준다.
  • 앞서 우리가 @BeforeEach를 통하여 테스트마다 리포지토리를 비워주었던 일을 하지 않아도 된다.
  • 테스트마다 rollback해줌.
  • 추가로 @Commit 애노테이션은 테스트 후에 commi시켜 실제 db에 등록한다.

@SpringBootTest

  • @SpringBootTest는 스프링 부트 어플리케이션 테스트 시 테스트에 필요한 거의 모든 의존성을 제공 어노테이션
  • @SpringBootApplication을 기준으로 스프링 빈을 등록함과 동시에 Maven 같은 빌드 툴에 의해 추가된 스프링부트 의존성도 제공
  • @SpringBootTest 어노테이션에는 webEnvironment라는 값을 통해 웹 어플리케이션 테스트시 Mock으로 테스트할 것인지 실제 톰캣 같은 서블릿 컨테이너를 구동해서 테스트할 것인지를 정할 수 있음.
  • 실제 스프링컨테이너를 띄우면서 테스트를 진행할 수 있다.
  • @SpringBootTest가 하는 역할은 @SpringBootApplication을 찾아서 테스트를 위한 빈들을 다 생성한다. 그리고 @MockBean으로 정의된 빈을 찾아서 교체한다.

공식 문서를 참고하면 도움이 될 것이다.

docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing

 

Spring Boot Features

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

 

 

 


그럼 스프링 통합 테스트를 하지 왜 java코드로 테스트하는 건 왜 필요함?

 

통합 테스트 VS 단위 테스트

  • DB, Spring container까지 같이 연동하여 테스트 진행 ==> 통합 테스트
  • java로만 테스트를 실행하여 최소한의 단위로만 테스트 진행 ==> 단위 테스트
  • 즉, 단위 테스트를 통하여 모듈을 테스트한 후에 통합 테스트를 진행하기 때문에 단위 테스트가 훨씬 더 중요하고 좋은 테스트이다.

더 깊이 있는 부분은 차후에 다뤄보도록 하겠다.

반응형

'Spring > Introduction to Spring' 카테고리의 다른 글

jpa  (0) 2021.02.22
JdbcTemplate  (0) 2021.02.20
spring DB 접근  (0) 2021.02.19
회원 웹 기능  (0) 2021.02.19
스프링 빈  (0) 2021.02.18