[Spring] 테스트

Updated: Categories:

테스트 방법에 대해 알아보자

Test Double

  • 테스트를 위한 객체를 만들어주는 존재
  • 종류
    • dummy : 객체는 필요하지만 기능은 필요없을 때 사용
    • fake : 실제 객체의 동작을 간소화하여 구현한 객체
    • stub : 테스트를 위해 준비된 결과를 반환해주는 객체
    • spy : stub 역할을 가지며 호출 내용에 대해 약간의 정보를 기록함
    • mock : 호출과 호출에 대한 기대를 명세하고, 내용에 따라 동작하도록 만들어진 객체

stub vs mock

  • stub은 상태검증에 사용되고, mock은 행위검증에 사용된다.
  • stub은 stubbing만 가능하지만, mock은 stubbing + mocking 둘 다 가능하다
    • stubbing : 호출에 대한 반환값을 정의하는 것
    • mocking : 행위를 검증할 수 있도록 해주는 것


상태검증 vs 행위검증

  • SUT(System Under Test) : 테스트를 진행할 대상 객체
  • 상태검증 : SUT가 실행된 후의 상태(결과)를 검증한다
  • 행위검증 : SUT가 실행되는 중 일어난 행위를 검증한다.


테스팅 레벨

  • 단위 테스트 : 모듈 하나를 고립시켜 테스트함
  • 통합 테스트 : 내부 모듈의 연동과 외부 모듈의 연동을 테스트함
  • 인수 테스트 : 사용자 시나리오에 맞춰 수행하는 테스트. End to End Test


테스트 커버리지

  • 테스트가 얼마나 충분한지를 나타냄
  • 화이트박스 테스트를 통해 측정한다
  • 종류
    • 구문(Statement/Line) : 코드 한줄이 한번 이상 실행되면 조건 충족
    • 조건(Condition) : if문의 내부 조건이 각각 true/false의 경우를 충족하는지 살펴봄
    • 결정(Decision/Branch) : if문 전체 조건이 true/false의 경우를 충족하는지 살펴봄


Junit4 vs Junit5

  • Junit : 자바 단위테스트 프레임워크
  Junit4 Junit5
Java 버전 Java 5이상 Java 8이상
모듈 전체를 로드 Platform, Jupiter, Vintage로 나뉘어져 있음


Spring Boot 계층별 테스트

  • 단위 테스트
    • 단일객체(Entity, Dto) : 상태 검증만 함
    • Repository : DataJpaTest
    • Service : Mockito
    • Controller : Mockito
  • 통합 테스트
    • Controller : MockMvc, RestDocs


TDD

  • Test Driven Development, 테스트 주도 개발
    • 테스트코드를 먼저 작성한 후 실제 코드를 작성하는 방법
    • 결정(코딩)과 피드백(에러)의 차이를 조절하기 위한 기술
  • 적용
    • 요구사항이 자주 바뀔 경우 사용
    • 불확실성이 높을 때