강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

kyuwon lee님의 프로필 이미지
kyuwon lee

작성한 질문수

MemberService 테스트시 `@Transaction`을 붙였을 때와 안 붙였을 때 차이

작성

·

127

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요 강의를 보면서 궁금한게 생겼는데 해결되지 않아 질문드립니다.
```java
    @Test
public void 회원가입() throws Exception {
//given
Member member = new Member();
member.setName("kim");

//when
Long saveId = memberService.join(member);

//then
// em.flush();
assertThat(memberRepository.findOne(saveId)).isEqualTo(member);
}
```
 
해당 코드 실행시 `@Transaction`애너테이션이 붙어 있을 경우는 테스트가 정상적으로 통과되지만 `@Transaction` 애너테이션이 붙어 있지 않을 경우 서로 다른 객체라고 테스트가 실패하게 됩니다.
 
org.opentest4j.AssertionFailedError: expected: jpabook.jpashop.domain.Member@21dd91da but was: jpabook.jpashop.domain.Member@7657d29f Expected :jpabook.jpashop.domain.Member@21dd91da Actual :jpabook.jpashop.domain.Member@7657d29f
 
왜 인지 명확하게 모르겠습니다.
 

답변 1

0

안녕하세요. kyuwon lee님, 공식 서포터즈 OMG입니다.

단순 조회의 경우 트랜잭션 없이 읽기가 가능하지만,

그 외 데이터 변경 시 트랜잭션 안에서 동작해야합니다.

발생한 상황이 정상입니다.

별도로 테스트에서는 @Transactional을 사용 할 경우 이전 테스트가 이후 테스트에 영향이 가지 않도록 롤백 됩니다.

 

영한님의 강의를 수강 중이시라면 인프런 상단 메뉴의 커뮤니티 탭 보다는

강의의  질문 게시판을 이용해주시면 감사하겠습니다.

 


감사합니다.

kyuwon lee님의 프로필 이미지
kyuwon lee

작성한 질문수

질문하기