[스프링 입문] 스프링 통합 테스트

enxnong·2023년 5월 5일
0

Spring

목록 보기
18/26

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.

스프링 컨테이너와 DB가 연결된 것을 확인하는 것이 스프링 통합 테스트이다.

packagehello.hellospring.service;

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

importjava.sql.SQLException;

import staticorg.assertj.core.api.Assertions.assertThat;
import staticorg.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest//스프링을 테스트할 때는 해당 어노테이션을 통해 쉽게 테스트 할 수 있다.
@Transactional
/*
테스트 케이스에 @Transactional를 붙이면,테스트 시작 전에 트랜잭션을 시작하고,테스트 완료 후에 항상 rollback함
단,서비스나 컨트롤러에 붙으면 rollback하지않고 정상적으로 작동한다.
만약 rollback하지 않으려면 @Commit을 붙이면 됨
=>다음 테스트를 반복해서 진행할 수 있다.
 */
classMemberServiceIntegrationTest {

@AutowiredMemberService memberService;
@AutowiredMemberRepository memberRepository;

@Test
void회원가입()throwsSQLException {
// Test는 한글로 바꿔도 상관없다

// given (이런 상황이 주어져서)
Member member =newMember();
        member.setName("hello");

// when (이걸 실행했을 때)
Long saveId = memberService.join(member);

// then (결과는 이것이 나와야돼)
Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());//이름 검증
}

@Test//테스트는 예외처리가 제일 중요하다
public void중복_회원_예외()throwsSQLException {

// given
Member member1 =newMember();
        member1.setName("spring");

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

// when
memberService.join(member1);

//예외처리 방법2
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
// member2를 넣으면 IllegalStateException예외가 발생해야됨

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

}
  • @SpringBootTest : 스프링을 테스트할 때 해당 어노테이션을 통해 쉽게 테스트 할 수 있다.
  • @Transactional
    • 테스트 케이스에 @Transactional를 붙이면,테스트 시작 전에 트랜잭션을 시작하고,테스트 완료 후에 항상 rollback한다.
    • 단,서비스나 컨트롤러에 붙으면 rollback하지않고 정상적으로 작동한다. 만약 테스트에서 rollback하지 않으려면 @Commit을 붙이면 된다.
    • 다음 테스트를 반복해서 진행할 수 있다.
profile
높은 곳을 향해서

0개의 댓글