[테스트코드 02] 단위테스트(Repository, Service)

Welcome to Seoyun Dev Log·2022년 8월 18일

테스트코드

목록 보기
2/7

단위 테스트 코드 작성시 원칙 5가지
1.fast : 테스트 코드를 실행하는 일은 오래 걸리면 안된다
2.Independent : 독립적으로 실행되어야 한다
3.Repeatable : 반복 가능
4.Self-Validating : 매뉴얼 없이 테스트 코드만 실행해도 성공,실패 여부 확인 가능해야함
5.Timely : 즉시 사용 가능해야 한다.


스프링 부트는 테스트를 위한 스타터를 제공하는데
디펜던시에 spring-boot-starter-test를 추가하면 자동으로 설정해준다

testImplementation 'org.springframework.boot:spring-boot-starter-test'
  • Junit5(현재 기준 기본으로 junit5로 설정), spring Test, assertJ, hamcrest, mockito, jsonNassert, jsonPath

01. 단위 테스트(Unit Test)

unit test

: 단위테스트는 다른 디펜던시가 전혀 없는 상황에서 실행할 수 있는 테스트를 의미

  • @SpringBootTest를 사용하지 않는다 (스프링을 전혀 실행하지 않는다)

  • 만약 테스트 해야할 클래스가 여러개라면 클래스를 직접 지정해주자
    (통합테스트 중에서도 특정 클래스만 테스트하면 되는 경우 클래스 속성 반드시 지정)

  • 데이터베이스 연동으로 bean이 필요하다면 Mock객체를 사용해서 테스트 (Mockito)

    WebEnvironment 서블릿 환경

    : //TODO


02. Repository

단위테스트 참고 블로그
: Repository만 테스트하기 위해서는 service와의 결합을 끊어야 한다.

@DataJpaTest

: 테스트 클래스에 적용

스프링부트 테스트는 @DataJpaTest 어노테이션을 제공하는데 이것을 통해서 repository 단일 테스트가 가능해진다.

  • jpa 관련된 설정만 로드한다. (WebMVC와 관련된 bean이나 기능은 로드되지 않는다)
  • jpa를 사용해서 CRUD 기능 테스트가 가능하다
  • @Transactional을 기본적으로 내장
  • 매 테스트 코드가 종료되면 자동으로 DB가 롤백된다
  • 기본적으로 내장 DB를 사용하는데 설정을 통해 실제 DB로 테스트도 가능하다(권장하지 않음)
  • @Entity가 선언된 클래스를 스캔하여 저장소를 구성한다

참조 : https://brunch.co.kr/@springboot/207

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글