테스트에서 매우 중요한 원칙
- 테스트는 다른 테스트와 격리해야 한다.
- 테스트는 반복해서 실행할 수 있어야 한다.
데이터 롤백
테스트가 끝나고 데이터를 롤백하지 않으면, 그다음 테스트에서 데이터가 중복되어 예상치 못한 결과가 발생할 수 있다.
이때 사용하는 것이 트랜잭션이다.
중간에 테스트가 실패하더라도 커밋이 되지 않았기 때문에, DB에는 데이터가 반영되지 않기 때문이다.
- 트랜잭션 시작
- 테스트 A
- 트랜잭션 롤백
- 트랜잭션 시작
- 테스트 B
- 트랜잭션 롤백
테스트에서는 @BeforeEach, @AfterEach 어노테이션을 통해 트랜잭션을 관리할 수 있다.
@Autowired
PlatformTransactionManager transactionManager;
TransactionStatus status;
@BeforeEach
void beforeEach() {
//트랜잭션 시작
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
}
@AfterEach
void afterEach() {
//트랜잭션 롤백
transactionManager.rollback(status);
}
- @BeforeEach: 각 테스트케이스를 실행하기 직전에 호출되며, 이때 트랜잭션을 시작하면 된다.
- @AfterEach: 각각의 테스트 케이스가 완료된 직후에 호출되며, 이때 트랜잭션을 롤백하면 된다.
트랜잭션을 이용하면 각 테스트간에 영향을 주지 않으며, 테스트를 반복해서 실행할 수 있다.
@Transactional
@Transactional 어노테이션은 로직이 성공하면 커밋하도록 동작한다.
그러나 테스트에서 사용할 경우 특별하게 동작하는데,
- 테스트를 트랜잭션 안에서 실행시킨다.
- 테스트가 성공적으로 종료돼도 자동으로 롤백시킨다.
위와 같이 두가지 장점이 있다.
롤백하고 싶지 않을경우, @Commit이나 @Rollback(false) 어노테이션을 이용하면 된다.
출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2
스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의
백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인
www.inflearn.com
'🍃Spring' 카테고리의 다른 글
[Spring] 선언적 트랜잭션 동작 확인하기 (0) | 2023.02.03 |
---|---|
[Spring DB] MyBatis 사용하기 (0) | 2023.01.29 |
[Spring DB] JDBC Template 사용하기 (0) | 2023.01.29 |
[Spring] Spring이란? (0) | 2023.01.28 |
[Spring] MapStruct (0) | 2023.01.23 |