DB접근 기술 테스트

wangjh789·2022년 8월 16일
0

[Spring] 스프링-DB-2

목록 보기
2/21

@SpringBootTest
@SpringbootApplication을 찾아 설정으로 사용한다.

트랜잭션과 롤백

테스트 코드는 각각의 테스트가 독립적으로 수행되어야 하고 순서에 의해 결과가 달라지면 안된다. 만약 DB를 포함한 테스트를 진행한다고 했을 때 각 테스트가 종료될 때 DB는 이전의 상태로 돌아와야 한다.

  1. 트랜잭션 시작
  2. 테스트 A 실행
  3. 트랜잭션 롤백

PlatformTransactionManager 사용

    @Autowired
    PlatformTransactionManager transactionManager;
    TransactionStatus status;

    @BeforeEach
    void beforeEach() {
        status = transactionManager.getTransaction(new DefaultTransactionDefinition());
    }

    @AfterEach
    void afterEach() {
        transactionManager.rollback(status);
    }

스프링은 PlatformTransactionManager를 자동으로 빈으로 등록해 주입해준다.

@Tranactional 사용

스프링이 제공하는 @Tranactional은 로직이 성공적으로 수행되면 커밋되도록 동작한다. 그런데 테스트에서 사용되면 테스트를 트랜잭션 안에서 실행하고, 테스트가 끝나면 트랜잭션을 자동으로 롤백시켜 버린다.

@Transactional
@SpringBootTest
class ItemRepositoryTest {
	...
}

만약 서비스 계층에 @Transactional 이 있다면? 테스트에 있는 트랜잭션에 참여해 같은 커넥션을 이용하게 된다.

만약 테스트에서도 롤백이 안되게 하고 싶다면

//    @Commit
    @Rollback(value = false)
    @Test
	void test(){...}

@Commit 이나 @Rollback(value=false) 를 붙이면 된다.

profile
기록

0개의 댓글