Be-Developer

UnitTesting 02 단위테스트란 무엇인가

02 단위테스트란 무엇인가

단위테스트의 정의

  • 작은 코드조각을 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트
    1. 고전적 접근법(Detroit) TDD
    • 작은 코드조각 ? 일반적으로 한번에 한 클래스를 테스트하는 지침을 따르려고 노력해야한다.
    • 격리된 방식 ? stateless, 테스트들이 순서에 의존되지않고 , 동시에 실행가능해야함.
      • 격리를 위해 테스트대역을 사용할 수 있지만 보통 테스트간에 공유상태를 일으키는 의존성에 대해서만 사용한다.
      • 공유 의존성을 대체하면 테스트 실행속도가 빨라진다.
        1. 런던파 (Mock 추종자 mockist)
    • 하나의 클래스가 다른 클래스 또는 여러 클래스에 의존하면 이 모든 의존성을 테스트 대역(test double)로 대체해야한다.
    • 테스트가 실패하면 어디가 고장났는지 확실히 알 수 있다.
    • object graph를 분할할 수 있다. 그래프가 커져도 테스트하기 쉽다.
    • test double 없이는 어렵다.
    • 런던스타일은 테스트가 구현에 더 자주 결합되는 편이다. mock을 전반적으로 아무데나 쓰는것에 대해 주로 이의가 제기된다.
\ 격리 주체 단위의 크기 테스트 대역 사용 대상
런던파 단위 단일 클래스 불변 의존성 외 모든 의존성
고전파 단위 테스트 단일 클래스 또는 클래스 세트 공유 의존성
  • 둘 이상의 동작단위를 검증할때의 테스트는 통합테스트이다. 종종 test suite의 실행 속도를 최적화하려는 노력의 결과이다.
  • endtoend 테스트는 일반적으로 통합테스트보다 의존성을 더 많이 포함한다. (ex, gateway)
  • e2e는 유지보스측면에서 가장 비용이 많이 들기때문에, 모든 단위테스트와 통합테스트를 통과한 후 빌드 프로세스 후반에 실행하는것이 좋다.