@Transactional
- 테스트를 할 때 이 애노테이션을 달면 트랜잭션을 먼저 실행하고 테스트를 실행한 후에(DB insert 등등) 마지막에 Rollback을 해준다.
- 앞서 우리가 @BeforeEach를 통하여 테스트마다 리포지토리를 비워주었던 일을 하지 않아도 된다.
- 테스트마다 rollback해줌.
- 추가로 @Commit 애노테이션은 테스트 후에 commi시켜 실제 db에 등록한다.
@SpringBootTest
- @SpringBootTest는 스프링 부트 어플리케이션 테스트 시 테스트에 필요한 거의 모든 의존성을 제공 어노테이션
- @SpringBootApplication을 기준으로 스프링 빈을 등록함과 동시에 Maven 같은 빌드 툴에 의해 추가된 스프링부트 의존성도 제공
- @SpringBootTest 어노테이션에는 webEnvironment라는 값을 통해 웹 어플리케이션 테스트시 Mock으로 테스트할 것인지 실제 톰캣 같은 서블릿 컨테이너를 구동해서 테스트할 것인지를 정할 수 있음.
- 실제 스프링컨테이너를 띄우면서 테스트를 진행할 수 있다.
- @SpringBootTest가 하는 역할은 @SpringBootApplication을 찾아서 테스트를 위한 빈들을 다 생성한다. 그리고 @MockBean으로 정의된 빈을 찾아서 교체한다.
공식 문서를 참고하면 도움이 될 것이다.
그럼 스프링 통합 테스트를 하지 왜 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 |