TestExecutionListener that provides support for executing tests within test-managed transactions by honoring Spring's @Transactional annotation.
Transaction 을 테스트에서 실행될 때는 Spring-managed transactions 가 아닌 test-managed transactions가 실행된다.
아래 문서를 반드시 읽어보길 권장드린다.
TransactionalTestExecutionListener :
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/transaction/TransactionalTestExecutionListener.html
위 문서를 읽어보는 것을 추천드리며 아래는 간단한 요약 본이다.
ex) @Rollback(false) 를 메서드나 클래스 위에 붙이면 테스트 후 롤백하지 않는다.
@Commit 과 @Rollback 을 동시에 사용하는 것은 지원하지 않고 예상치못한 결과를 초래하므로 절대 금지
이것을 통해 Test-managed Transaction과 트랜잭션과 상호 작용할 수 있다. api doc
@Test @Before @After 메서드에서 상호작용 가능
ex)
assertTrue(TestTransaction.isActive(),"안전을 위해 트랜잭션 처리를 해주세요");
assertTrue(TestTransaction.isFlaggedForRollBack());
//@Rollback(false) 를 설정하면 통과 안됨
모든 속성이 지원되는 것은 아니다.
@SpringBootTest
@Transactional
@Rollback(value = true)
class LoginRepositoryTest {
//... 중략
@BeforeEach
public void checkTransactionIsActive(){
//Assumption
assertTrue(TestTransaction.isActive(),"안전을 위해 트랜잭션 처리를 해주십시오");
assertTrue(TestTransaction.isFlaggedForRollback(),"롤백 설정을 확인하세요");
}