GW LABS

스프링 부트 핵심 가이드 (5) - 테스트 코드 작성하기 본문

Book-Review/Programing

스프링 부트 핵심 가이드 (5) - 테스트 코드 작성하기

GeonWoo Kim 2022. 8. 15. 15:07

7.1 테스트 코드를 작성하는 이유

  • 개발 과정에서 문제를 미리 발견할 수 있다.
  • 리팩토링의 리스크가 줄어든다.
  • 애플리케이션을 가동해서 직접 테스트하는 것보다 빠르게 테스트를 수행할 수 있다.
  • 하나의 명세 문서로 활용할 수 있다.
  • 불필요한 로직이 추가되는 것을 방지한다.

 

7.3 테스트 코드를 작성하는 방법

  • Given-When-Then
    • Given: 테스트를 수행하기 전 테스트에 필요한 환경설정
    • When: 테스트의 목적을 명시
    • Then: 테스트의 결과를 검증
  • F.I.R.S.T
    • Fast: 테스트는 빠르게 수행되어야 한다.
    • Isolated: 하나의 테스트 코드는 하나의 대상에 대해서만 수행되어야 한다.
    • Repeatable: 어떤 환경에서도 반복 가능해야 한다.
    • Self-Validating: 테스트는 그 자체만으로도 검증이 완료되어야 한다.
    • Timely: 테스트 코드는 테스트하려는 애플리케이션 코드를 구현하기 전에 완성되어야 한다.

 

7.4 JUnit을 활용한 테스트 코드 작성

  • 생명주기
    • BeforeAll: 테스트를 시작하기 전에 호출되는 메서드
    • BeforeEach: 각 테스트 메서드가 실행되기 전에 동작하는 메서드
    • AfeterAll: 테스트를 종료하면서 호출되는 메서드
    • AfeterEach: 각 테스트 메서드가 종료되면서 호출되는 메서드
  • 컨트롤러 테스트
    • WebMvcTest: 웹에서 사용되는 요청과 응답에 대한 테스트 수행.
    • MockBean: SpringBoot의 Mock객체 생성/주입 어노테이션
    • Service 레이어를 Mocking하여 테스트를 수행한다.
    • 슬라이스 테스트: 단위 테스트와 통합 테스트의 중간 개념으로, 각 레이어별로 나누어 테스트를 진행한다는 의미
      • DataJdbcTest, DataJpaTest, JsonTest, RestClientTest 등의 어노테이션을 활용해서 각 레이어를 테스트!
  • 서비스 테스트
    • ExtendWith(MockitoExtension.class): Mockito Mock 객체들을 테스트에서 자동생성할 때 사용한다.
    • InjectMocks: Mock 객체들을 자동으로 의존성 주입을 해준다.
  • 리포지토리 테스트
    • JPA 리포지토리의 기본 기능들의 경우 이미 검증이 되었기 때문에 테스트 코드 작성시에는 이유가 있어야한다.
    • DataJpaTest: 리포지토리를 주입받을 수 있도록 하는 어노테이션
    • AutoConfigureTestDatabase: 테스트 환경의 데이터베이스를 설정하는 어노테이션

 

 

GitHub - youlive789/spring-boot-guide: 스프링부트 핵심 가이드 스터디

스프링부트 핵심 가이드 스터디. Contribute to youlive789/spring-boot-guide development by creating an account on GitHub.

github.com

 

Comments