스프링 입문

Ch06. 스프링 DB 접근 기술 - 스프링 통합 테스트

webmaster 2021. 12. 1. 21:44
728x90
  • 실제 데이터가 DB에 잘 들어가고 접속이 잘 되는지 테스트를 진행해야 된다.
  • 이전에는 순수한 JAVA Code를 실행하는 단위 테스트였다.
    • 단위 테스트 설계를 잘할 경우 통합 테스트보다 좋은 성능으로 빠르게 테스트를 완료할 수 있지만 통합 테스트가 필요한 시기가 존재하므로 통합테스트 진행법도 알아야 한다.
@Transactional//Test를 실행할때 Transactional어노테이션을 달게 되면 DB에 실제 넣지 않고 Test를 실행한뒤, 롤백해준다.
@SpringBootTest//스프링 테스트를 위한 어노테이션
class MemberServiceIntegrationTest {
    //테스트 케이스같은 경우 다른데에서 가져다 쓰는것이 아니기 때문에 굳이 생성자를 통한 주입을 받을 필요는 없다
    @Autowired MemberService memberService;

    @Autowired MemberRepository memberRepository;


    @Test
    void 회원가입() {
        Member member = new Member();
        member.setName("spring");
        //@Transactional 해당 어노테이션 때문에 테스트 케이스를 계속 실행 하여도 문제 없다
        Long saveId = memberService.join(member);

        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());
    }

    @Test
    public void 중복_회원_예외(){
        //given
        Member member1 = new Member();
        member1.setName("spring");

        Member member2 = new Member();
        member2.setName("spring");

        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원 입니다.");

    }


}
  • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
  • @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다
728x90