테스트 블로그 모음집

Jinsu Kim·2022년 8월 15일
0

Rails-Rspec

목록 보기
3/3

TDD에 대한 몇가지 질문

  • Q1 테스트 코드를 리팩터링 해야만 하나?
  • Q2 테스트 코드를 리팩터링 하면 테스트를 위한 로직이 늘어나서 유지보수 부담이 증가할까?
  • Q3 given/when/then을 작성하는 순서가 어떤 영향을 미치나?
  • Q4 어떤 순서로 테스트 케이스를 추가하나?
  • Q5 업무가 주어지면 전반적인 구현 방안이 머리가 구려지는데... 그래서 TAD를 하는데... TFD를 해야하나?

https://brunch.co.kr/@cleancode/44

클린코더스 TDD

TDD - 1

TDD의 3대 원칙

  • 실패 케이스가 있을 경우에만 production 코드를 생성한다.
  • 실패를 입증하기에 충분한 테스트를 작성한다.
  • 어떤 테스트가 있으면 그 테스트가 통과할 만큼만 production 코드를 생성한다.

리팩토링은 선택 사항이 아니다. 필수사항이다.

원칙 & 팁

  • 가장 간단하고 난이도가 낮은 부분부터 시작한다.
  • 테스트 실패시 production 코드 수정은 너무 어렵게 하지 않는다. 최소한의 코드로 수정한다.
  • 테스트가 많은 케이스를 수행할수록 production 코드는 범용적으로 된다.

TDD의 장점

  • 디버깅에 시간을 보내는건 좋은 것이 아니다.

  • 잘 작성된 테스트코드 그 자체가 문서가 된다.

  • 테스트 코드를 먼저 작성하면 decoupling 된 production 코드를 갖게 된다.

  • 작성자 본인이 귀찮기 때문에 먼저 작성된 테스트 코드가 복잡하게 될 코드를 작성하지 않게 된다.

  • 변경을 두려워하지 않게된다.

  • (중요 포인트) 테스트 코드가 있기 때문에 기능상 문제를 보장받고 리팩토링 할 수 있다.

    • 완벽한 설계에 기반해서 개발했더라도 테스트가 없다면 코드를 수정하는데 두려움이 있다.
    • 반면에 끔찍한 설계에 기반해서 개발했더라도 테스트가 있다면 코드를 수정하는데 두려움이 없다.
      실습
  • 클래스 생성도 하지 않고, 테스트 코드를 먼저 만들어 실패케이스를 만든다.

  • split vertical 모드로 테스트 코드와 production 코드를 함께 보면서 진행한다.

  • 테스트 메소드는 한글/언더스코어를 사용해도 된다. 오직 어떤 테스트인지 나타내는데 집중한다.

TDD - 2

  • 가장 빠르게 피드백을 얻을 수 있는 것을 찾아서 테스트 메소드를 작성하라.
  • 그 테스트 메소드가 크게 느껴진다면 해당 메소드 코드를 주석처리하라, 그리고 이를 가장 쉬운 방식으로 쪼개보라
  • extract method object를 활용하여 테스트 코드상에서 클래스가 해야하는 일들을 분리하자
  • 상수는 무조건 제거대상

백명석님의 클린코더스 영상

profile
Ruby와 js로 첫 커리어를 시작하였고 3년차 엔진니어입니다! vim에 관심이 많습니다!

0개의 댓글