Skip to main content

4. 테스트 구축하기

리팩터링은 분명 가치가 있지만, 이를 불가피하게 저지르는 실수를 잡아주는 테스트 스위트(test suite)가 뒷받침되어야합니다.

4.1 자가 테스트 코드의 가치#

개발의 대부분 시간은 디버깅에 사용합니다.

  • 모든 테스트를 완전히 자동화하고 그 결과까지 스스로 검사하게 만듭니다.
  • 테스트 스위트는 강력한 버그 검출 도구로, 버그를 찾는 데 걸리는 시간을 대폭 줄여줍니다.

테스트에 대한 팁은 다음과 같습니다.

  • 테스트를 작성하기 가장 좋은 시점은 프로그래밍을 시작하기 전입니다.
  • 기능을 추가할 때는 테스트부터 작성합니다. (TDD)

4.2 테스트할 샘플 코드#

코드

mochachai를 사용한 코드입니다.

4.3 첫번째 테스트#

테스트 코드에서 신경써야하는 부분은 다음과 같습니다.

  • 실패해야 할 상황에서는 반드시 실패하게 만듭니다.
  • 자주 테스트합니다. 작성 중인 코드는 최소한 몇 분 간격으로 테스트하고, 적어도 하루에 한 번은 전체 테스트를 돌리는 것이 중요합니다.
    • 테스트 최적화가 필요합니다.

4.4 테스트 추가하기, 4.5 픽스처 수정하기#

코드

다음을 신경써서 테스트 코드를 작성하는 것이 중요합니다.

  • 테스트는 위험 요인을 중심으로 작성해야합니다. 즉, 단순한 테스트는 거의 필요가 없습니다.
  • 완벽하게 만드느라 테스트를 수행하지 못하는 경우, 불완전한 테스트라도 작성해서 실행하는 것이 중요합니다.
  • beforeEach를 통해서 설정한 표준 픽스처를 적용해서 검증하는 것도 좋은 방법입니다.
    • 일반적으로 위의 코드와 같은 패턴을 설정-실행-검증(setup-exercise-verify)이라고 합니다.
    • 네번째 단계는 해체(teardown) 혹은 청소(cleanup)이라고 하는데 이는 명시적으로 언급이 안될때가 많습니다.

4.6 경계 조건 검사하기#

코드

다음을 신경쓰는 것이 중요합니다.

  • 문제가 생실 가능성이 있는 경계 조건을 생각해보고 그 부분을 집중적으로 테스트합니다.
  • 잘못된 데이터가 흘러서 디버깅하기 어려운 문제가 발생한다면 어서션 추가하기를 통해서 오류를 최대한 빠르게 찾아야합니다.
  • 어차피 모든 버그를 잡아낼 수는 없다고 생각해서 테스트를 작성하지 않는다면 대다수의 버그를 잡을 수 있는 기회를 날리게 됩니다.

4.7 끝나지 않은 여정#

위에서 나온 코드는 단위 테스트(unit test)입니다.

  • 버그 리포트를 받으면 가장 먼저 그 버그를 드러내는 단위 테스부터 작성합니다.
  • 테스트 때문에 개발 속도가 느려진다면 테스트를 과하게 사용했을 수도 있으나 적은 것보다는 무조건 낫습니다.
Last updated on