ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 단위 테스트란 무엇인가
    개발 도서/Unit Testing 2024. 6. 3. 03:01

    단위 테스트는 많은 뉘앙스로 사용되고 있다.
    이로 인해 해석에 차이가 생겼고, 뚜렷한 두가지 견해로 나뉘었다.
    각각 고전파와 런던파로 알려져 있다.
    고전파는 모든 사람이 단위 테스트와 테스트 주도 개발에 원론적으로 접근하는 방식이다.
    런던파는 런던의 프로그래밍 커뮤니티에서 시작되었고, Mock을 적극적으로 활용하는 것이 특징이다.

     

    2.1 단위 테스트의 정의
    단위 테스트의 가장 중요한 세가지 속성은 아래와 같다.

    • 작은 코드 조각(단위)을 검증한다.
    • 빠르게 수행한다.
    • 격리된 방식으로 처리하는 자동화된 테스트다.
      여기서 주관적인 차이가 생기는 것은 첫번째와 세번째인데, 고전파와 런던파를 가르는 것에는 세번째 속성이 결정적인 역할을 한다.

    런던파는 불변 의존성을 제외하고 테스트 대상 단위 의외의 모든 의존성을 대역으로 대체해야 한다는 주장이다.
    고전파는 '단위'가 아닌 '단위 테스트'를 서로 분리해야 한다고 말한다.
    테스트 대상 단위를 '코드 단위'가 아닌 '동작 단위'로 초점을 맞추고 있다.
    따라서 공유 의존성만 테스트 대역으로 대체해야 한다는 주장이다.

    • 공유 의존성 : 테스트가 서로의 실행 흐름에 영향을 끼치는 수단을 제공하는 의존성을 말한다. 예를들면 정적 가변 필드(static mutable field), 데이터베이스 등이 있다.

    2.2 단위 테스트의 런던파와 고전파
    런던파와 고전파의 차이점을 정리한다.

      격리주체 단위의 크기 테스트 대역 사용 대상
    런던파 단위 단일 클래스 불변 의존성 외 모든 의존성
    고전파 단위 테스트 단일 크래스 또는 클래스 세트 공유 의존성

     

    2.3 고전파와 런던파의 비교
    런던파는 다음과 같은 장점을 가진다.

    • 더 나은 입자성의 이점
    • 상호 연결된 클래스간의 테스트 용이성
    • 버그 추적 편의성

    이에 대해 고전파는 아래와 같은 주장을 펼쳤다.

    • 동작 단위로 테스트하는 것이 옳다. (코드 조각을 테스트 할 수 없다면, 설계에 문제가 있다는 강한 징후이다. 테스트 대역은 이 사실을 숨길 뿐, 해결하지 않고 있다.)
    • 자동화된 테스트 환경이라면, 어떤 코드로 인해 문제가 생겼는지 알 수 있기 때문에 고전파가 버그 추적의 편의성이 떨어진다고 볼 수 없다.
    • 런던파의 가장 큰 문제는 과잉 명세, 즉 SUT 세부 구현에 결합된 테스트 문제다. (이는 4장의 Mock과 관련된 주제로 더 알아볼 수 있을 듯 하다.)

    2.4 두 분파의 통합 테스트
    통합 테스트란, 단위 테스트가 가지는 세가지 조건 중 하나 이상 충족시키지 못하는 테스트를 뜻한다.
    단위 테스트의 세가지 조건

    • 작은 코드 조각을 검증한다.
    • 빠르게 수행한다.
    • 격리된 방식으로 수행한다.

    통합 테스트는 주로 아래와 같은 상황을 테스트 한다.

    • 공유 의존성에 접근하는 테스트이다.
    • 프로세스 외부 의존성에 접근하는 테스트이다.
    • 둘 이상의 동작을 함께 테스트한다.

    2.4.1 통합 테스트의 일부인 엔드 투 엔드 테스트
    일반적으로 통합 테스트는 의존성을 한두 개만 가지고 작동한다.
    엔드 투 엔드 테스트는 프로세스 외부 의존성을 전부 또는 대다수 가지고 작동한다.
    따라서 엔드 투 엔드라는 명칭은 모든 외부 애플리케이션을 포함해 시스템을 최종 사용자의 관점에서 검증하는 것을 의미한다.

    '개발 도서 > Unit Testing' 카테고리의 다른 글

    6. 단위 테스트 스타일  (0) 2024.06.18
    5. 목과 테스트의 취약성  (0) 2024.06.17
    4. 좋은 단위 테스트의 4대 요소  (0) 2024.06.14
    3. 단위 테스트 구조  (0) 2024.06.04
    1. 단위 테스트의 목표  (0) 2024.06.01
Designed by Tistory.