본문으로 건너뛰기

README

Unit Testing

유닛 테스트 가이드

  • 테스트 대역
    • 테스트 대역은 모든 유형의 비운영용 가짜 의존성을 설명하는 포괄적인 용어다
    • 실제로 목과 스텁의 두 가지 유형으로 나눌 수 있다
    • 목: 목은 외부로 나가는 상호 작용을 모방하고 검사하는데 도움이 된다
    • 스텁: 스텁은 내부로 들어오는 상호 작용을 모방하는데 도움이 된다
    • 스텁으로 상호 작용 검증하지 말라
  • 시스템 내부 통신과 시스템간 통신
    • 시스템 내부 통신
      • 애플리케이션 내 클래스 간의 통신
      • 구현 세부 사항
      • 목을 사용하지 않는다.
    • 시스템간 통신
      • 애플리케이션을 통해서만 접근할 수 있는 외부 시스템은 구현 세부 사항으로 목으로 대체하지 않는다
      • 부작용이 외부 환경에서 보일 때만 목을 사용하여 검증한다.
        • 즉 식별할 수 있는 동작인 경우만 목을 사용한다.
  • 공유 의존성
    • 공유 의존성은 테스트 간의 격리를 무너뜨려 테스트를 병렬적으로 실행할 수 없게 한다
    • 프로세스 내부
      • 프로세스 내부 공유 의존성의 전형적인 예는 정적 가변 필드싱글턴이 있다
      • 각 테스트에서 별도의 인스턴스를 공급할 수 있어 비공개 의존성으로 만들 수 있다
    • 프로세스 외부
      • 프로세스 외부 공유 의존성의 대표적인 예로 데이터베이스나, 메시지 버스, SMTP 서비스가 있다.
      • 일반적인 접근법은 이러한 의존성을 테스트 대역, 목과 스텁으로 교체
      • 프로세스 외부 의존성이 애플리케이션을 통해서만 접근할 수 있으면 이러한 의존성과의 통신은 시스템에서 식별할 수 있는 동작이 아니다.
    • 관리 의존성
      • 완전한 제어권을 가진 프로세스 외부 의존성을 관리 의존성이라고 한다.
      • 애플리케이션을 통해서만 접근할 수 있는 외부 시스템과의 통신이 구현 세부 사항인 이유는 통신 결과의 부작용을 외부에서 확인할 수 없기 때문이다

참고