본문 바로가기
WEB/Clean Code

[Clean Code] 9장. 단위테스트

by IT황구 2022. 2. 23.
728x90
반응형

단위테스트지만 TDD를 봤음.

9장. TDD

TDD

TDD법칙 3가지

  • 실패하는 단위테스트를 작성할 때까지 실제 코드를 작성하지 않는다
  • 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
  • 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.

깨끗한 테스트코드 유지하기

  • 테스트 코드는 실제 코드 못지 않게 중요하다
  • 깨끗한 단위 테스트 코드로 짜면 된다.

그렇다면 깨끗한 테스트 코드를 만들려면 어떻게 해야할까?

  • 가독성이 제일 중요하다.
  • 최소의 표현으로 많은 것을 나타내야 한다.
  • 테스트 환경은 자원이 제한적일 가능성이 낮으므로, 깨끗한 코드가 더 좋다.
@Test
public void turnOnCoolerAndBlowerIfTooHot() throws Exception {
  tooHot();
  assertEquals("hBChl", hw.getState());
}

@Test
public void turnOnHeaterAndBlowerIfTooCold() throws Exception {
  tooCold();
  assertEquals("HBchl", hw.getState());
}

@Test
public void turnOnHiTempAlarmAtThreshold() throws Exception {
  wayTooHot();
  assertEquals("hBCHl", hw.getState());
}

@Test
public void turnOnLoTempAlarmAtThreshold() throws Exception {
  wayTooCold();
  assertEquals("HBchL", hw.getState());
}
public String getState() {
  String state = "";
  state += heater ? "H" : "h";
  state += blower ? "B" : "b";
  state += cooler ? "C" : "c";
  state += hiTempAlarm ? "H" : "h";
  state += loTempAlarm ? "L" : "l";
  return state;
}
// 가독성이 조금 더 떨어진다.

테스트당 assert는 하나만 하자.

  • 테스트당 assert의 개수는 최대한 줄이는것이 좋다.
  • 단일함수 단일기능 처럼, 단일 테스트 함수 단일 개념
  • 여러개를 한번에 넣으면 나중에 읽는사람이 보기가 불편하다.

깨끗한 테스트의 규칙 F.I.R.S.T

  • F(FAST)
    • 테스트는 빨리 돌아가야한다. 테스트가 느리면 자주 돌리기가 힘들다.
  • I(independent)
    • 각 테스트는 서로 의존하면 안된다. 한 테스트가 다음 테스트가 실행될 환경을 준비해서는 안된다.
    • 하나의 실패가 연이은 실패를 만들 수 있기때문에, 독립적으로 실행되어야 한다.
  • R(Repeatable)
    • 테스트는 어떤 환경에서도 반복 가능해야 한다. (실제 환경, QA환경, 버스를 타고 집갈때도)
    • 심지어 네트워크가 되지 않는 환경에서 되어야 한다. (?? 이건 어떻게 하는지 잘 모르겠음, 서버와 연결되어 있다면?)
  • S(Self-Validating)
    • 테스트는 T/F로 결과를 내야한다. 성공 또는 실패.
  • T(Timely)
    • 테스트는 시기 적절하게 작성해야 한다. Unit Test는 테스트 하려는 실제코드를 구현하기 직전에 구현한다.

테스트는 유연성, 유지보수성, 재사용성을 제공한다

  • 단위 테스트는 위 3가지를 제공한다
  • 테스트 케이스가 있으면 코드의 변경에서 덜 두려워 할 수 있다.
  • 테스트 커버리지가 높을수록 변경에 덜 불안하다.
728x90
반응형

'WEB > Clean Code' 카테고리의 다른 글

[Clean Code] 11장. 시스템  (0) 2022.02.24
[Clean Code] 10장. 클래스  (0) 2022.02.23
[Clean Code] 8장. 경계  (0) 2022.02.22
[Clean Code] 7장. 오류처리  (0) 2022.02.21
[Clean Code] 6장. 객체와 자료구조  (0) 2022.02.21