저번에 진행했던 테스트 들은 스프링과 관련없는 자바코드 테스트 였다!!

이번에는 스프링과 관련지어  테스트를 해보았다!

 

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.junit.jupiter.api.*;
import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
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.junit.jupiter.api.Assertions.*;

@SpringBootTest
@Transactional
public class MemberServiceIntegrationTest {

        @Autowired MemberService memberService;
        @Autowired MemberRepository memberRepository;

        @Test
        void 회원가입() {
            //given
            Member member = new Member();
            member.setName("hello");
            //when
            Long saveId = memberService.join(member);
            //then
            Member findMember = memberService.findOne(saveId).get();
            Assertions.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));

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

        }

        @Test
        void findMembers() {
        }

        @Test
        void findOne() {
        }
    }

 

@Transactional 애너테이션 을 주게되면

테스트 시작 전에 트랜잭션을 실행하고 완료 후

 롤백을 하게된다. 이렇게되면 DB에 데이터가 남기에 다음테스트에

영향을 줄 수 없다!

그렇기에 지난 테스트 코드의 @Before @After가 필요없게 되었다!

 

@SpringBootTest 애너테이션을 주게되면 

스프링 컨테이너와 테스트를 함께 실행한다.

 

그렇다면? 전에 작성했던 코드는 의미가 없는것이 아닐까?

답은 아니다. 

순수하게 자바코드로 최소한의 단위로 테스트 하는것을

단위테스트

 

스프링,컨테이너까지 같이 테스트하는 것은 

통합테스트

 

단위 테스트가 좋은 테스트일 확률이 높기때문에 

단위테스트를 잘만들어야 좋은 테스트라고 할 수 있다.!

'웹프로그래밍 > Spring 입문' 카테고리의 다른 글

19. JPA  (0) 2021.06.30
18. 스프링 JDBC Template  (0) 2021.06.29
16. 순수 JDBC  (0) 2021.06.24
15. H2 데이터베이스 설치  (0) 2021.06.24
14. 회원 웹 기능 - 조회  (0) 2021.06.24

+ Recent posts