본문 바로가기
Spring Tutorial

[Spring 입문 11] 스프링 DB 접근 기술: 스프링 통합 테스트

by 미소5 2024. 8. 3.

 

Spring 입문3 -회원 관리 예제 (tistory.com)

 

Spring 입문3 -회원 관리 예제

컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등

joly156.tistory.com

  • MemoryMemberRepositoryTest MemberServiceTest는 스프링과 전혀 관련없는, 순수 자바코드 테스트 (즉, 단위테스트. 순수 자바코드로 최소한의 단위로 하는 테스트) 
  • 현재(스프링 부트 DB연결)는 순수 자바코드로 테스트 불가능  →스프링 컨테이너와 DB까지 연결한 통합 테스트를 만들어보자

  • 회원 서비스 스프링 통합 테스트
  • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
  • @Transactional : 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백(DB에 저장된 데이터를 삭제)한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다. → 반복 가능한 테스트 지원
  •  @Autowired : 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계 주입 →@BeforeEach로 각 테스트 실행 전마다 의존관계 넣어줄 필요 없어짐
@SpringBootTest     //스프링 컨테이너와 테스트를 함께 실행
@Transactional //테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다
class MemberServiceIntegrationTest {

    //@Autowired로 의존관계 넣어주기 (DI)
    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    @Test
    void join() throws Exception{
        //Given
        Member member = new Member();
        member.setName("hello");
        //When
        Long saveId = memberService.join(member);
        //Then
        Member findMember = memberService.findOne(saveId).get();
        //assertThat(member.getName()).isEqualTo(findMember.getName());
        assertEquals(member.getName(), findMember.getName());
    }

    @Test
    void 중복_회원_예외() throws Exception {
        //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));

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

 

 

 

 

728x90
반응형