inflearn

[인프런] 김영한의 스프링 입문 - 스프링 통합 테스트

hail2y 2024. 6. 29. 17:32

@SpringBootTest

  • 테스트 할 때도 (실제 db와 연결하는) 스프링과 같이 동작하도록  연결하는 방법
  • 보통 사용자 db 데이터가 아닌 테스트 전용 db를 따로 구축하여 테스트를 한다

@Transactional

  • 테스트 케이스에 해당 애너테이션을 붙이면 테스트를 실행할 때 sql 문이 db에 반영되지 않도록 하는 방법
  • 테스트가 끝나면 롤백을 한다 (= 커밋을 안 한다)
  • 클래스 레벨에 선언하면  선언한 클래스 내부의 모든 메서드나 서브 클래스에 적용된다
  • 예를 들어 트랜잭션 시작하고 테스트 하나 실행하고 끝나면 롤백하고 ...
  • If your test is @Transactional, it rolls back the transaction at the end of each test method by default.

* Test 예시

@SpringBootTest // 스프링 컨테이너와 테스트를 함께 실행
@Transactional  // 테스트 완료 후 항상 롤백 실행 (데이터베이스 반영 X)
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    @Test
    void 회원가입() throws Exception {

        // given
        Member member = new Member();
        member.setName("spring");

        // when
        Long savedId = memberService.join(member);

        // then
        Member findMember = memberService.findOne(savedId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());
    }
}