PlatformTransactionManager

jooog·2022년 6월 6일
0

Test

목록 보기
1/2

✨ 테스트 원칙

테스트는 다른 테스트와 격리되어 실행되어야 하며 반복해서 실행할 수 있어야 한다.

기본적으로 테스트를 실행하면 데이터베이스에 데이터가 그대로 남아있게 된다. 이런 경우에는 이전 테스트와 별개로 반복적인 테스트를 할 수 없다. 따라서 테스트가 끝나면 트랜잭션을 롤백해서 기존 테스트 실행으로 남아있는 데이터를 삭제해줄 필요가 있다.

✨ 트랜잭션과 롤백

테스트 환경에서 데이터베이스에 남아있는 데이터를 깔끔하게 제거하고 매번 새롭게 테스트를 실행하기 위해서는 트랜잭션을 롤백하면된다.

트랜잭션 시작 -> 테스트 실행 -> 트랜잭션 롤백의 순서로 실행한다.

✨ PlatformTransactionManager

테스트 클래스 안에 PlatformTransactionManager를 주입해준다.


import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

@SpringBootTest
class ItemRepositoryTest {

    @Autowired
    ItemRepository itemRepository;
    
    @Autowired
    PlatformTransactionManager transactionManager;
    TransactionStatus status;
}


	//모든 테스트를 실행하기 전 트랜잭션 시작
    @BeforeEach
    void beforeEach(){
        status = transactionManager.getTransaction(new DefaultTransactionDefinition());
    }
    
    //테스트가 끝나면 롤백
    @AfterEach
    void afterEach() 
        
        //트랜잭션 롤백
        transactionManager.rollback(status);
    }

테스트를 돌려보면 제대로 롤백된 것을 확인할 수 있다.

✨ 정리

트랜잭션 관리자는 PlatformTransactionManager를 주입받아 사용하면 된다.

🎨 트랜잭션 시작

transactionManager.getTransaction(new DefaultTransactionDefinition());

Test시 @BeforeEach 어노테이션을 붙이면 각 테스트 케이스를 실행하기 전에 호출된다. 여기서 트랜잭션이 시작하고 @AfterEach 어노테이션이 붙은 메서드는 각 테스트 케이스가 완료된 직후에 호출되며 여기서 트랜잭션을 롤백하게 된다.

🎨 트랜잭션 롤백

transactionManager.rollback(status);

이 글은 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의를 듣고 정리한 내용입니다.

0개의 댓글