테스트 코드 작성 순서

초반에 복잡한 테스트부터 시작하면 안되는 이유

만약 초반부터 다양한 조합을 검사하는 복잡한 상황을 테스트로 추가하면 해당 테스트를 통과시키기 위해 한번에 구현해야 할 코드가 많아진다.

구현하기 쉬운 테스트부터 시작하기

하나의 테스트를 통과했으면 그 다음으로 구현하기 쉬운 테스트를 선택한다. 구현이 어렵지 않기 때문에 짧은 시간에 구현을 완료하고 테스트를 통과시킬 수 있다. 보통 수분내에 구현을 완료하고 통과시킬 수 있는 테스트를 선택해야 한다. 이를 통해 점진적으로 구현을 완성해 나갈 수 있다.

한번에 구현하는 시간이 짧아지면 디버깅할 때에 유리하다. 작성한 코드가 많지 않고 작성 시간도 짧으면 머릿속에 코드에 대한 내용이 생생하게 남아 있기 때문에 디버깅할 때 문제 원인을 빠르게 찾을 수 있다.

예외 상황을 먼저 테스트해야 하는 이유

예외 상황을 전혀 고려하지 않은 코드에 대해 예외 상황을 반영하려면 코드의 구조를 뒤집거나 코드 중간에 예외 상황을 처리하기 위해 조건문을 중복해서 추가하는 일이 벌어진다. 이는 코드를 복잡하게 만들어 버그 발생 가능성을 높인다. → 예) 빈값, null 등

완급 조절

  1. 정해진 값을 리턴
  2. 값 비교를 이용해서 정해진 값을 리턴
  3. 다양한 테스트를 추가하면서 구현을 일반화

테스트 대상 코드의 리팩토링 시점

테스트 대상 코드에서 상수를 변수로 바꾸거나 변수 이름을 변경하는 것과 같은 작은 리팩토링은 발견하면 바로 시행한다. 반면에 메서드 추출과 같이 메서드의 구조에 영향을 주는 리팩토링 은 큰 틀에서 구현 흐름이 눈에 들어오기 시작한 뒤에 진행한다.