TDD
1. 도메인 로직을 단위 테스트
- 1차적으로는 도메인 로직을 단위 테스트 하는 것에 집중
- view / controller는 테스트하기 어려운 부분이다. (통합/인수 테스트로 테스트 가능)
2. 테스트를 통과하는 로직 구현
3. 리팩토링
TDD 시작하기
어디서 시작해야할 지 모르겠다면?
- 요구사항이 분석이 안됐다.
- 대략적인 도메인 설계 후에 TDD를 진행하자.
요구사항 분석을 어떻게 잘 할까?
구현할 기능 목록 작성하기
기능 목록 작성도 어렵다면?
일단 구현
→ 도메인 지식이 쌓인다.
구현한 모든 코드를 버린다.
이후 기능 목록 작성 후 가장 만만한 부분부터 TDD로 구현해보기
복잡도가 높아져서 또 어려워지면? 다시 버린다.
TDD 잘하기
- 특정 상태를 만드는 것을 할 줄 알아야 한다.
- 끊을 줄 알아야 한다.
- 설계와 구현을 분리해라.
- 테스트하기 쉬운 부분과 어려운 부분을 분리해라.
- 테스트하기 어려운 부분은 설계를 개선해서 테스트하기 쉽게 만들어라.
리팩토링의 중요성
- TDD를 하면서 리팩토링을 지속하지 않으면 복잡도가 높은 코드는 금방 지저분해진다.
- 유지보수하기 어려워진다.
- 그럼 테스트 코드를 짜기 싫어진다 … 😢
- 점점 더 복잡해진다.
- (나중) 잘 동작하는 코드 건드렸다가 큰일날까봐(!)
- (+) get하지 말고 객체에 메시지를 보내라
Test Fixture
- Test Fixture를 만드는 단계가 복잡할수록 테스트 코드를 짜기가 어렵다.
- 테스트를 위한 메소드는 추가하면 안된다.
- 테스트를 위한 생성자는 추가해도 된다. 생성자는 잘 안 써서 많으면 많을수록 좋다.
- 생성자를 새로 만들어서 Test Fixture를 간단하게 만들 수 있다면 👌🏻
- 생성자에 인자가 많아진다? 객체의 크기가 큰 것으로 객체의 크기를 줄여라.