Skip to content

Commit

Permalink
test: 학습테스트 stage2 주석추가
Browse files Browse the repository at this point in the history
  • Loading branch information
cookienc committed Oct 12, 2023
1 parent 15767e9 commit 169fa2d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public String saveSecondTransactionWithMandatory() {
return TransactionSynchronizationManager.getCurrentTransactionName();
}

// @Transactional(propagation = Propagation.NOT_SUPPORTED)
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public String saveSecondTransactionWithNotSupported() {
userRepository.save(User.createTest());
logActualTransactionActive();
Expand Down
21 changes: 14 additions & 7 deletions study/src/test/java/transaction/stage2/Stage2Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ void tearDown() {
}

/**
* 생성된 트랜잭션이 몇 개인가?
* 왜 그런 결과가 나왔을까?
* 생성된 트랜잭션이 몇 개인가? 1
* 왜 그런 결과가 나왔을까? Required는 트랜잭션이 없을 때만 새로 생긴다.
*/
@Test
void testRequired() {
Expand All @@ -50,8 +50,8 @@ void testRequired() {
}

/**
* 생성된 트랜잭션이 몇 개인가?
* 왜 그런 결과가 나왔을까?
* 생성된 트랜잭션이 몇 개인가? 2
* 왜 그런 결과가 나왔을까? Reauired_New 옵션은 트랜잭션 존재 유무와 관계 없이 항생 새로 생긴다.
*/
@Test
void testRequiredNew() {
Expand All @@ -69,6 +69,7 @@ void testRequiredNew() {
/**
* firstUserService.saveAndExceptionWithRequiredNew()에서 강제로 예외를 발생시킨다.
* REQUIRES_NEW 일 때 예외로 인한 롤백이 발생하면서 어떤 상황이 발생하는 지 확인해보자.
* secondUserService에서 발생한 예외 때문에 롤백되지만 firstUserService는 롤백되지 않는다.
*/
@Test
void testRequiredNewWithRollback() {
Expand All @@ -83,6 +84,7 @@ void testRequiredNewWithRollback() {
/**
* FirstUserService.saveFirstTransactionWithSupports() 메서드를 보면 @Transactional이 주석으로 되어 있다.
* 주석인 상태에서 테스트를 실행했을 때와 주석을 해제하고 테스트를 실행했을 때 어떤 차이점이 있는지 확인해보자.
* 기존 Transaction이 있으면 새로 만들고 없으면 논리적 트랜잭션으로 동작
*/
@Test
void testSupports() {
Expand All @@ -97,7 +99,9 @@ void testSupports() {
/**
* FirstUserService.saveFirstTransactionWithMandatory() 메서드를 보면 @Transactional이 주석으로 되어 있다.
* 주석인 상태에서 테스트를 실행했을 때와 주석을 해제하고 테스트를 실행했을 때 어떤 차이점이 있는지 확인해보자.
* 트랜잭션이 없으면 예외를 발생
* SUPPORTS와 어떤 점이 다른지도 같이 챙겨보자.
* 트랜잭션이 없으면 새로운 논리적 트랜잭션을 만드는 Support와 달리 Mandatory를 예외를 발생시킨다.
*/
@Test
void testMandatory() {
Expand All @@ -112,7 +116,7 @@ void testMandatory() {
/**
* 아래 테스트는 몇 개의 물리적 트랜잭션이 동작할까?
* FirstUserService.saveFirstTransactionWithNotSupported() 메서드의 @Transactional을 주석 처리하자.
* 다시 테스트를 실행하면 몇 개의 물리적 트랜잭션이 동작할까?
* 다시 테스트를 실행하면 몇 개의 물리적 트랜잭션이 동작할까? simpleJparRepository 때문에 모두 2개씩 사용된다.
* <p>
* 스프링 공식 문서에서 물리적 트랜잭션과 논리적 트랜잭션의 차이점이 무엇인지 찾아보자.
*/
Expand All @@ -122,13 +126,15 @@ void testNotSupported() {

log.info("transactions : {}", actual);
assertThat(actual)
.hasSize(1)
.containsExactly("transaction.stage2.FirstUserService.saveFirstTransactionWithNotSupported");
.hasSize(2)
.containsExactly("transaction.stage2.FirstUserService.saveFirstTransactionWithNotSupported",
"transaction.stage2.SecondUserService.saveSecondTransactionWithNotSupported");
}

/**
* 아래 테스트는 왜 실패할까?
* FirstUserService.saveFirstTransactionWithNested() 메서드의 @Transactional을 주석 처리하면 어떻게 될까?
* 트랜잭션이 없으면 새롭게 시작하기 때문에 정상동작한다.
*/
@Test
void testNested() {
Expand All @@ -142,6 +148,7 @@ void testNested() {

/**
* 마찬가지로 @Transactional을 주석처리하면서 관찰해보자.
* NEVER는 트랜잭션이 없어야 정상동작한다.
*/
@Test
void testNever() {
Expand Down

0 comments on commit 169fa2d

Please sign in to comment.