[박우빈, Practical Testing #4]테스트는 [ ]다.

dev_lee·2024년 11월 10일
post-thumbnail

테스트는 [ ]다.

테스트는 문서다.

  • 프로덕션 기능을 설명하는 테스트 코드 문서
  • 다양한 테스트 케이스를 통해 프로덕션 코드를 이해하는 시각과 관점을 보완
  • 어느 한 사람이 과거에 경험했던 고민의 결과물을 팀 차원으로 승격시켜서, 모두의 자산으로 공유할 수 있다.

우리는 항상 팀으로 일하므로, 내가 작성한 코드 혹은 문서들이 다른 팀원들에게 어떤 영향을 끼칠지를 항상 고민하면서 작성하는 것이 중요하다.


DisplayName을 섬세하게

JUnit5에 추가된 어노테이션이다.

@DisplayName("도메인 정책, 용어를 사용한 명확한 문장으로 테스트 설명")
  • 명사의 나열보다 문장으로
  • “~테스트” 지양하기
  • 테스트 행위에 대한 결과까지 기술하기
  • 도메인 용어를 사용하여 한층 추상화된 내용을 담기
    - 메서드 자체의 관점보다 도메인 정책 관점으로
  • 테스트 현상을 중점으로 기술하지 말 것
    - “성공한다”, “실패한다” 지양하고 도메인 정책 관점으로 기술하기
// 1. 
@DisplayName("특정 시간 이전에 주문을 생성하면 실패한다.");

// 2. 
@DisplayName("영업 시간 시작 이전에는 주문을 생성할 수 없다.");

1번처럼 작성하는 것 보다 2번처럼 작성하는 것이 좋다.


BDD 스타일로 작성하기

BDD : Behavior Driven Development

  • TDD에서 피생된 개발 방법
  • 함수 단위의 테스트에 집중하기보다, 시나리오에 기반한 테스트케이스(TC) 자체에 집중하여 테스트한다.
  • 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 추상화 수준(레벨)을 권장 ⇒ 문서로서의 기능

Given / When / Then

  • Given : 시나리오 진행에 필요한 모든 준비 과정(객체, 값, 상태 등)
  • When : 시나리오 행동 진행
  • Then : 시나리오 진행에 대한 결과 명시, 검증

예제 코드

// CafeKioskTest.java
@DisplayName("주문 목록에 담긴 상품들의 총 금액을 계산할 수 있다.")
@Test
void calculateTotalPrice() {
    // given : 어떤 환경에서
    CafeKiosk cafeKiosk = new CafeKiosk();
    Americano americano = new Americano();
    Latte latte = new Latte();

    cafeKiosk.add(americano);
    cafeKiosk.add(latte);

    // when : 어떤 행동을 진행했을 때
    int totalPrice = cafeKiosk.calculateTotalPrice();

    // then : 어떤 상태 변화가 일어난다
    assertThat(totalPrice).isEqualTo(8500);
}

→ DisplayName을 명확하게 작성하는 데에도 도움이 된다.


출처 - 박우빈, Practical Testing: 실용적인 테스트 가이드

0개의 댓글