친한 개발자에게도 쉽게 알려 주지 않는 TDD의 가장 큰 장점은 테스트가 실패하는 것을 시작으로 테스트 코드의 수정 없이 기능 수정만으로 테스트를 통과하도록 한다는 것이다. 테스트 자체를 검증하는 것이다. 이 검증은 테스트가 예상대로 실패하고, 이후 코드를 수정한 후 테스트가 통과되는 과정을 거쳐 이루어진다. 실패할 것이라고 예상했는데 통과하면 테스트에 버그가 있거나 잘못된 코드를 테스트하고 있다는 의미다. 코드를 수정하고 테스트를 다시 돌렸을 때 여전히 실패한다면 테스트에 버그가 있거나 기댓값을 잘못 받아 오고 있다는 의미일 수 있으니 점검이 필요하다.
이 책은 가독성과 유지 보수성이 좋고 신뢰성이 높은 테스트를 다루지만, 여기에 TDD를 추가하면 좀 더 자신감 있는 테스트를 만들 수 있다. 테스트가 실패하더라도 코드를 수정하여 테스트를 통과하는 과정 자체를 명확하게 볼 수 있기 때문이다. 코드 작성 후 테스트를 하면 보통은 코드가 잘 돌아가고 있을 때만 테스트가 통과하는지 확인한다. 반면 TDD를 하면 테스트가 실패할 때와 통과하는 과정 모두를 겪는다. 이 과정에서 개발자는 테스트가 정확히 작동하는지 확인할 수 있어 디버깅을 덜 하게 된다. 테스트를 전적으로 믿을 수 있기 때문에 ‘만일을 대비하여’ 디버깅할 필요를 느끼지 않는다. 이러한 믿음은 테스트가 실패할 때와 통과할 때를 모두 확인할 때만 얻을 수 있다.