1. @SpringBootTest
Spring IOC Container 와 테스트를 함께 실행하도록 지원하는 어노테이션
2. @Transactional
DB에 테스트 결과 데이터가 남아 다음 테스트에 영향을 주지 않기 위해서 테스트 시작 전에 트랜잭션을 시작하고 테스트 완료 (Commit) 후에 Rollback을 수행하도록 지원하는 어노테이션
3. 회원 통합 테스트
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
@Test
public void 회원가입() throws Exception {
//Given
Member member = new Member();
member.setName("hello");
//When
Long saveId = memberService.join(member);
//Then
Member findMember = memberRepository.findById(saveId).get();
assertEquals(member.getName(), findMember.getName());
}
@Test
public void 중복_회원_예외() throws Exception {
//Given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//When, Then
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class,
() -> memberService.join(member2));//예외가 발생해야 한다.
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
}
4. 순수 Java 코드 테스트 vs 통합 테스트