Spring 입문 스프링 통합 테스트

1c2·2023년 8월 29일
0

Spring 입문

목록 보기
11/16

전체 서비스에 대한 테스트 코드를 작성해 보도록 하겠습니다.

test/hello.hellospring/service 디렉토리에 MemberServiceIntegrationTest 파일을 생성합니다.

package hello.hellospring.service;
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.*;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
@Transactional //transaction을 먼저 실행하고 테스트가 끝나면 다시 roll back 
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
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class,
                () -> memberService.join(member2));//예외가 발생해야 한다.
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
    }
}

기존 테스트 코드를 복/붙 해줍니다. 앞에 @SpringBootTest @Transactional 태그를 붙입니다.
SpringBootTest: 스프링 컨테이너와 테스트를 함께 실행합니다.
Transactional: db와 transaction을 실제로 실행을 하여 db에 데이터를 넣고 나중에 roll back을 해주는 기능입니다.

0개의 댓글