스프링 통합 테스트

구름코딩·2020년 10월 18일
0

기존 MemberServiceTest 클래스를 이용해서 스프링과 연동된 MemberSerbiceIntegrationTest 클래스를 만들어준다

몇가지 수정사항을 추가한다

  • @SpringBootTest
  • @Transactional
@SpringBootTest
@Transactional
//각 test를 실행할때 Transactional을 먼저 실행 후 test가 끝나면 다시 롤백을 해준다
// 이를 통해 테스트로 인해 남은 데이터없이 테스트를 계속 반복 시행할수 있게된다
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    @Test
    void 회원가입() {
        //given
        Member member = new Member();
        member.setName("woonsik");

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

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

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

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

        //when
        memberService.join(member1);

        //then
        //assertThrows를 사용한 경우 -> 내가 원하는 예외의 클래스가 터지는지 학인한다
        assertThrows(IllegalStateException.class, () -> memberService.join(member2));

        //반환값으로 받아서 추가적인 확인도 가능하다
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
    }
}

실제 DB와 연동되어 테스트를 할수있다는 장점이있지만 spring컨테이너를 전부 올리고 테스트를 진행하게 되어서 속도가 매우 느리다. 따라서 이전에 사용한 MemberServiceTest class와 같이 로컬의 메모리를 이용해서 진행하는 테스트인 순수한 단위 테스트를 활용하는 것이 좋은 테스트이다. 기능마다 세부적으로 나누어서 순수한 단위 테스트로 전부 테스트할 수 있게 하는것이 좋다

profile
내꿈은 숲속의잠자는공주

0개의 댓글