관심쟁이 영호

[#9.3] 스프링 부트 ㅣ Spring Boot ㅣ 기능 테스트, 테스트 코드 짜기 본문

Bank-End/인프런- Spring 공부

[#9.3] 스프링 부트 ㅣ Spring Boot ㅣ 기능 테스트, 테스트 코드 짜기

관심쟁이 영호 2021. 4. 13. 01:26
반응형

1. 테스트 코드로 살펴볼 점

- 회원가입 성공

- 회원가입 중복이 예외처리 되는지.

 

바로 코드로 살펴보자.

 

2. MemberService에서 ctrl + shift + T 입력하고 코드를 작성해준다.

//MemberServiceTest

package jpashop.jpashop.service;

import jpashop.jpashop.domain.Item.Member;
import jpashop.jpashop.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;

import static org.junit.jupiter.api.Assertions.*;


@SpringBootTest
@Transactional //test코드에서 transaction이 있으면 insert를 한다음 롤백해버린다.
class MemberServiceTest {


    @Autowired
    MemberService memberService;

    @Autowired
    MemberRepository memberRepository;

    @Autowired
    EntityManager em;

    @Test
    @Rollback(false) //롤백을 하지 않게 하기 위해서 - 실제 db에 insert가 되는 것을 보고싶을 때 사용
    public void 회원가입() throws Exception {
        //given
        Member member = new Member();
        member.setName("cha");

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

        //then
        em.flush(); //이렇게하면 insert문이 로그에 찍힌다.
        assertEquals(member, memberRepository.findOne(savedId));

    }


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

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

        //when
        memberService.join(member1);
        try{
        memberService.join(member2); //여기서 에러가 발생해야함

        }catch(IllegalStateException e){
            return;
        }

        //then
        fail("예외가 발생");

    }
}

3. 회원가입(), 중복확인() 테스트가 정상 작동하는지 파악하자.

흐름을 보면

(1) Member 객체를 생성하고, name을 지정해준다.

그리고 Service로 set해주고, 비교한다.

 

(2) Member 객체를 이름이 똑같게 2개 생성해준다.

그리고 두개 다 set해준다.

이 때, IllegalStateException이 발생하고 catch문으로 실행 되고, fail에 던져진다.

 

4. 메모리 DB를 이용하자.

- 이것을 이용하는 이유는 실무에서 테스트를 해야할 때, 모든 DB를 설치하고 넣고 빼고 힘들다..

그래서 간편하게 사용할 수 있는 메모리 DB를 사용해준다.

 

(1) test 디렉터리에 resources 디렉터리를 만들어준다.

(2) resources에 application.yml을 main의 application.yml을 복사해준다.

(3) 생성해준 application.yml의 url을 메모리DB로 바꾸어준다.

(4) 메모리 DB코드는 jdbc:h2:mem:test 이다.

 

성공적으로 테스트가 되는 것을 알 수 있다.

 

 

 

 

 

 

 

 

 

 

 

본 강의는 인프런의 김영한 개발자님이 강의하고 계신

"실전! 스프링 부트와 JPA활용1 - 웹 애플리케이션 개발"을 수강하면서 정리한 글입니다.

300x250
Comments