반응형

서론


회사에서 단위 테스트 스터디를 하면서 챕터 11에서 테스트로 도메인 지식을 유출하면 안된다는 내용을 봤다.

좋은 내용 같아서 정리한다.

본론


문제점

  • 무의미한 검증
  • 거짓 음성(거짓 성공)
  • 도메인 로직과 강결합

calculateTotalPrice()를 테스트할 경우 테스트는 통과하게 된다.

하지만 무의미한 검증이다. 문제점을 알아보자.

class Payment {

  private double price;

  public Payment(double price) {
    this.price = price;
  }

  public double calculateTotalPrice() {
    return price * 1.1;
  }

  public double getPrice() {
    return price;
  }
}

@Test
void 무의미한_테스트() {
  // given
  Payment sut = new Payment(10_000);

  // when
  double actual = sut.calculateTotalPrice();

  // then
  double expected = sut.getPrice() * 1.1; // 로직 노출
  assertThat(actual).isEqualTo(expected);
}
  1. 도메인 로직 복사로 전혀 검증이 되지 않는다.

    결과는 11,000이 나와야 하는데 롤직이 price * 10으로 잘못 로직을 작성해도 테스트는 통과하게 된다.

  2. 로직은 바뀌고 결과는 같을 경우 혼란을 준다.

방안

하드 코딩으로 검증한다.

이 코드는 모든 문제를 해결한다.

@Test
void 하드코딩_검증() {
  // given
  Payment sut = new Payment(10_000);

  // when
  double actual = sut.calculateTotalPrice();

  // then
  double expected = 11_000
  assertThat(actual).isEqualTo(expected);
}

참고 자료


단위 테스트 11장 11.3

https://jojoldu.tistory.com/615

반응형
복사했습니다!