스프링에서 @Transactional 어노테이션은 트랜잭션 관리를 활성화하는 데 사용됩니다. 테스트 메서드에 @Transactional을 붙이면 다음과 같은 기능이 적용됩니다:
@Test
@Transactional
public void testMember() throws Exception {
//given
Member member = new Member();
member.setUserName("memberA");
// when
Long saveId = memberRepository.save(member);
Member findMember = memberRepository.find(saveId);
//then
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUserName()).isEqualTo(member.getUserName());
}
위 코드에서 @Transactional 어노테이션이 없으면 다음과 같은 문제가 발생할 수 있습니다:
기본적으로 테스트에서는 @Transactional이 자동으로 롤백되도록 설정되어 있지만, 실제 데이터베이스에 변경 내용을 적용하고 싶다면 @Commit 어노테이션을 추가하거나 @Rollback(false) 설정을 사용할 수 있습니다.
@Test
@Transactional
@Rollback(false) // 데이터베이스에 변경 내용을 적용
public void testMemberPersist() {
// Test logic
}