Search
Duplicate

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

상태
스프링입문
담당자
속성 1
Spring
JAVA
MVC
jdbc
속성
9
지금까지의 기능들을 테스트해보자!
1.
test > java > hello.hellospring > service > MemberServiceIntegration.java를 생성
2.
@SpringBootTest : Spring부팅을 시작해 준다.
3.
@Transactional : DB(데이터 베이스) 테스트 중 insert, update, delete 되는 기능을 확인 후에 롤백시켜준다. 테스트를 지속적으로 할 수 있게 유지시켜준다.
package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import org.assertj.core.api.Assertions; 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.assertThrows; //이전에 실행 시켰던 것을 다시 재실행 shift + F10@SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test void 회원가입() { //given 주어주다 Member member1 = new Member(); member1.setName("hello"); // when 실행했을때 memberService.join(member1); // then 결과값 Assertions.assertThat(memberService.findOne(member1.getId()).get().equals(member1)); } @Test void 중복_회원_예외() { //given 주어주다 Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); // when 실행했을때 memberService.join(member1); //then assertThrows(IllegalStateException.class, ()-> memberService.join(member2)); } @Test void 회원조회() { Member member1 = new Member(); member1.setName("typark"); memberService.findByName(member1.getName()); Assertions.assertThat(memberService.findMembers().size()).isEqualTo(1); } }
Java
복사
결론
이제 통합 테스트를 진행 해봤다. @SpringBoot와 @Transactional로 편하게 조회 할 수 있을 뿐만아니라 이전 시간에 이야기했던 SpringConfig를 통해서 테스트 또한 따로 변경없이 DB접근 후 통합테스트가 가능했다. 하지만 강사님이 이야기하는 테스트 잘하는 사람들은 메모리로 빠르게 단위 테스트 후 마지막에 Spring에 접근해서 통합테스트를 한다고 한다. 물론 통합 테스트도 중요하지만 진짜로 잘하는 개발자는 순수한 단위 테스트를 잘하는 개발자인 것이다.
이 글은 인프런의
제목 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강사 : 김영한 님의 동영상을 참조해 만들었습니다.