Unit Test

기본 구조

  1. 준비(Arrange)
  2. 실행(Act)
  3. 검증(Assert)

커버리지

커버리지가 낮으면 좋지 않은 테스트지만 높다고 좋은 테스트는 아니다.

  • 코드 커버리지 : 테스트가 진행하는 라인 / 전체 라인
  • 분기 커버리지 : 테스트가 진행하는 분기 / 전체 분기

테스트 스타일

  • 출력 기반 테스트 : 테스트 대상에 입력을 넣고 출력을 검사
  • 상태 기반 테스트 : 작업 완료 후 테스트 대상의 상태를 검사
  • 통신 기반 테스트 : Mock을 사용해 상호작용을 검사

좋은 단위 테스트 요소

우선 순위는 리팩토링 내성 = 유지 보수성 > 회귀 방지 = 빠른 피드백이다.

  1. 회귀 방지 : 코드 변경에 의한 기능 이상을 감지할 수 있어야한다.
  2. 리팩토링 내성 : 리팩토링 후에도 테스트 결과는 변하지 않아야한다.
  3. 빠른 피드백 : 테스트가 과하게 오래걸리면 안된다.
  4. 유지 보수성 : 테스트는 이해하기 쉽고, 실행하기 쉬워야한다.

고려해볼만한 것

  1. 한 테스트에 여러 개의 준비, 실행, 검증 피하기
  2. 테스트 내 분기 지양
  3. 실행 구절이 길어지는 경우를 의심하라
  4. 테스트 간 결합도 상승 지양
  5. 팩토리 메소드로 초기화 고려
  6. [테스트 메소드][시나리오][예상결과] 형식의 테스트 컨벤션
  7. 프로그램이 실행 프로세스 외의 프로세스를 의존하는 경우 목, 스텁을 적용(과한 사용은 피하라)