단위 테스트

TDD 법칙 세 가지

  1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하기 않는다.
  2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
  3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
  • 위 세 가지 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶임
  • 이렇게 하면 매일 수십개, 수백개, 수천개의 테스트 케이스가 생성됨
  • 실제코드와 맞먹을 정도의 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 함

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

  • 테스트 코드를 잘 작성하지 않으면 변경되는 실제 코드에 대한 테스트 코드 변경이 어려움
  • 테스트 코드가 없으면 자신이 수정한 코드가 제대로 동작하는지 확인할 방법이 없음
  • 테스트 코드가 없으면 이쪽을 수정해도 저쪽이 안전한지 검증하지 못함
  • 테스트코드는 실제코드만큼 중요

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

  • 테스트코드를 깨끗하게 유지하지 않으면 결국 잃어버림
  • 코드의 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트
  • 단위 테스트는 설계와 아키텍처를 최대한 깨끗하게 보존하는 열쇠

깨끗한 테스트 코드

  • 깨끗한 테스트코드를 만들려면 가독성이 중요

테스트 당 assert 하나

  • give-when-then
  • TEMPLATE METHOD 패턴을 사용하면 중복된 코드를 제공가능

F.I.R.S.T

  • First
    • 테스트는 자주돌려야함, 그래서 빨라야함
  • Independent
    • 각 테스트는 서로 의존하면 안됨(독립적으로 수행해야함)
    • 하나의 테스트 실패로 연쇄실패가 발생해서는 안됨
  • Repeatable
    • 테스트는 어떤 환경에서도 반복 가능해야함
    • 테스트가 하나라도 돌아가지 않는 환경이 있으면 안됨
  • Self-validating
    • 테스트는 bool값으로 결과를 내야함
    • 성공 아니면 실패
  • Timely
    • 단위 테스트는 테스트라혀는 실제 코드를 구현하기 직전에 구현해야함
    • 실제 코드를 구현하고 테스트 코드를 구현하면 실제코드가 테스트하기 어렵다는 사실을 발견하거나 테스트를 불가능하게 코드를 작성할 가능성이 존재함

References