17. Spring 통합 테스트

Bummy·2023년 4월 29일
0
post-thumbnail

Memory에 데이터를 넣어서 테스트 했을 때와 달리 데이터베이스를 연결해 사용할 때는 Spring 통합 테스트로 진행해야한다.

MemberServiceIntegrationTest.java

package hello.hellospring.sevice;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;
    @Test
    void 회원가입() {
        //given
        Member member = new Member();
        member.setName("spring");

        //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("spring");

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

        //when
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));

        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
    }
}
  • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 진행한다.
  • @Transactional : 테스트 케이스에 이 어노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다.
💡 즉, 테스트를 하나의 트랜잭션으로 묶고 테스트가 끝나면 다시 롤백을 해주기 때문에 테스트로 발생한 데이터베이스 커밋을 지워주지 않아도 되는 간편함이 있다. 해당 어노테이션을 통해 반복적인 테스트 수행이 가능하게 된다.

실행 결과

다음과 같이 정상적으로 수행되는 것을 확인할 수 있다.

0개의 댓글