본문으로 바로가기
반응형

 

 

이전 포스팅에선

H2 DB prop 정보를 이용하여 스프링과 DB를 연결하였다.

 

 

실제 서버에서 잘 동작하는지 테스트 해볼 수 있지만, 

좋은 개발자가 되기 위해서 테스트 케이스로 작성해보고자 한다.

 

 

 

repository와 DB 테이블 정보는 아래 링크를 참조하면 된다.

https://healthdevelop.tistory.com/entry/spring21

 

[Spring] DB(데이터베이스) 연동하기 | 순수 JDBC | 회원 가입, 회원 조회

자바 프로젝트에서 생성한 데이터들을 DB와 연동하고자 한다. spring에서 제공하는 JPA 방식을 사용하면 간편하게 연동이 가능하지만, 스프링을 활용하지 않고 사용하는 JDBC 방법부터 알아보고자

healthdevelop.tistory.com

 

 

 

 

 

 

 


1. 테스트 케이스 작성  

 

 

 

 

회원 가입과 중복 회원 예외에 대해서 테스트를 해보고자 한다.

 

 

 

 

 

 

 

 

MemberServiceIntegrationTest.java

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.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest // spring test 용(local에 연결)
@Transactional // transaction 을 먼저 실행하고 test 끝나고 data를 rollback 한다 -> db에 실제로 적용이 안됨
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

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

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

        //then
        Member findMember = memberService.findOne(savedId).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);
        // memberService.join(member2) 이 로직을 실행할건데,IllegalStateException.class 이 예외가 발생해야해
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));

        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");

        /* try-catch 방법
        try {
            memberService.join(member2);
            fail();
        } catch (IllegalStateException e){
            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
        }
        */
        //then
    }

}

 

 

코드의 설명은 주석을 참고하면 된다.

 

여기서 짚고 넘어가야할 부분은 

 

@SpringBootTest 
@Transactional

 

위 두 애노테이션이다.

 

 

 

 

@SpringBootTest를 통해 실제 스프링과 실행하여 테스트를 진행한다.

 

@Transactional을 통해 테스트로 작성했던 데이터들을 rollback하여,

실제 Db에 저장하지 않도록 한다.

 

 

 

 

회원가입 테스트만 진행 과정을 설명한다면,

 

spring이란 이름을 가진 회원을 join(가입)시키고

해당 회원의 Id를 가져와 

spring이란 회원이 잘 찾아지는지 검사한다.

 

 

 

 

 

 

 

2. 테스트 진행  

 

 

 

이제 실제 테스트를 진행하면,,

 

 

 

 

정상적으로 테스트가 완료되었다.

 

반응형