Spring Boot JUnit 통합 테스트

Codren·2021년 9월 11일
0

Section 1. Spring & DB 연동 통합 테스트

1. @SpringBootTest

Spring IOC Container 와 테스트를 함께 실행하도록 지원하는 어노테이션




2. @Transactional

DB에 테스트 결과 데이터가 남아 다음 테스트에 영향을 주지 않기 위해서 테스트 시작 전에 트랜잭션을 시작하고 테스트 완료 (Commit) 후에 Rollback을 수행하도록 지원하는 어노테이션




3. 회원 통합 테스트

  • 테스트를 실행할 때 Spring Boot Web App 실행됨
  • IOC Container 또한 생성되기 때문에 Config 설정 파일의 bean 객체들 생성됨
  • @Autowired 가능
@SpringBootTest
@Transactional
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, Then
               memberService.join(member1);
               IllegalStateException e = assertThrows(IllegalStateException.class,
                    () -> memberService.join(member2));//예외가 발생해야 한다.
               
       	       assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
       }
      }




4. 순수 Java 코드 테스트 vs 통합 테스트

  • 순수 Java JUnit 테스트 는 단위 테스트 개념으로 테스트 속도가 훨씬 빠름
  • Spring Boot JUnit 통합테스트는 Spring 도 같이 실행되므로 비교적 속도가 느림

0개의 댓글