레이블이 Transaction인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Transaction인 게시물을 표시합니다. 모든 게시물 표시

[Spring Junit] Transaction Rollback with Junit

[Spring Junit] Transaction Rollback with Junit
JUnit 테스트시에 DB설정은 다음과 같다.


  1. DataSource 설정
  2. Transaction 설정 
  3. Junit 테스트 수행. 

이때 DB에 입력 및 삭제 테스트를 진행하면 실제로 데이터가 DB로 입력되거나, 삭제가 발생한다.
이를 선택적으로 수행할 수 있는 방법은 다음과 같다.

@Log4j
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
DBConfiguration.class
})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
Bla... Bla... TestCodes.....

상기 코드에서 @TransactionConfiguration 부분의 프로퍼티 값으로 2가지 설정을 해준다.

  • transactionManager : 어느 트랜잭션매니저를 이용할 것인지 기술한다. 
  • defaultRollback : 기본 롤백 정책을 입력한다. (true : 롤백진행, false : 롤백없이 바로 CUD진행)
그리고 중요한 것은 @Transactional을 꼭 입력해야한다는 사실..
이 어노테이션은 해당 테스트가 트랜잭션 하에서 수행하게 할 것인지 지정해주는 것이니...
당. 연. 히 넣어주는 쎈스. 


Spring Transactional Propagation

Spring Transactional Propagation

트랜잭션 전파 : 


MANDATORY
현재 트랜잭션을 지원한다. 만약 트랜잭션이 존재하지 않으면 exception을 던진다. 

NESTED
만약 현재 트랜잭션이 존재하는 경우라면, 중첩된 트랜잭션을 실행한다.
트랜잭션이 없다면 PROPAGATION_REQUIRED 처럼 동작한다.
NEVER
트랜잭션 없이 수행되도록 한다. 만약 트랜잭션이 존재한다면 exception을 던진다. 
NOT_SUPPORTED
트랜잭션을 지원하지 않는다.
원래 현재 트랜잭션은 대기한다. 
REQUIRED
현재 트랜잭션을 지원하며, 존재하지 않는다면 신규 트랜잭션을 생성한다. 
REQUIRES_NEW
신규 트랜잭션을 생성한다. 그리고 원래 현재 트랜잭션은 대기한다. 
SUPPORTS
Support a current transaction, execute non-transactionally if none exists.
트랜잭션을 지원한다. 트랜잭션이 존재하지 않았다면 트랜잭션 없이 수행한다.