-
@Transactional 롤백/커밋 테스트jpa/Spring Data JPA 2023. 7. 19. 17:46
application프로퍼티에서 org.springframework 패키지를 debug로 잡으면 로그가 많이 남기때문에
TransactionManager에 대해서만 debug로 잡고 테스트
@Rollback(true)인 경우
package study.hibernate.springdatajpa.transaction; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.transaction.AfterTransaction; import org.springframework.test.context.transaction.BeforeTransaction; import org.springframework.transaction.annotation.Transactional; import lombok.extern.slf4j.Slf4j; // @Rollback(true) 어노테이션이 붙은 것과 동일 @SpringBootTest @Transactional @ActiveProfiles("test") @TestInstance(Lifecycle.PER_CLASS) @Slf4j public class TransactionTest { @BeforeAll void beforeAll() { log.debug("=================================> @BeforeAll"); } @BeforeTransaction void beforeTransaction() { log.debug("=================================> @BeforeTransaction"); } @BeforeEach void beforeEach() { log.debug("=================================> @BeforeEach"); } @AfterTransaction void afterTransaction() { log.debug("=================================> @AfterTransaction"); } @AfterEach void afterEach() { log.debug("=================================> @AfterEach"); } @AfterAll void AfterAll() { log.debug("=================================> @AfterAll"); } @Test void test1() { log.debug("=================================> test1"); } @Test void test2() { log.debug("=================================> test2"); } }
각 테스트의 @BeforeEach 수행전 트랜잭션 시작 @AfterEach 종료시 트랜잭션 롤백
@Rollback(false)인 경우
@SpringBootTest @Transactional @ActiveProfiles("test") @Rollback(false) @TestInstance(Lifecycle.PER_CLASS) @Slf4j public class TransactionTest {
각 테스트의 @BeforeEach 수행전 트랜잭션 시작 @AfterEach 종료시 트랜잭션 커밋
@BeforeEach, @AfterEach 또한 각 테스트의 트랜잭션에 포함되기 때문에 각 테스트의 전후에 Transactional하지 않은 작업이 필요한 경우 @BeforeTransaction, @AfterTransaction이 붙은 메서드를 정의하여 Transaction과 관련되지 않은 작업을 진행시킨다.
@BeforeAll, @AfterAll또한 Transactional하게 처리되지 않음