TDD란 테스트 주도 개발이라는 뜻으로 개발을 먼저하고 테스트를 하는게 아닌 여러 경우의 수를 테스트코드로 작성하고 테스트에 통과할 수 있도록 개발을 하는 것을 말한다.
TDD는 위와 같은 순서를 가진다. 레드는 실패하는 테스트 코드 그 다음 테스트가 단순 통과하는 코드로 변경 이 과정이 그린 통과한 코드를 다시 수정하는 과정 리팩터 이런 순환 과정을 계속해서 반복한다.
쉬운 조건에서 어려운 조건순으로 진행
예를 들어 값을 검증하는 부분에 대한 테스트를 작성시에 모든 조건이 충족되는 경우부터 각각 경우가 충족되지 않는 경우 순으로 작성하자
예외적인 경우에서 정상인 경우로 진행
null같은 예외처리를 하지 먼저 하지 않을 경우 예외가 추가될 경우 복잡한 if-else 구조가 추가될 경우가 있다. 이러한 경우를 예방하기 위해서 먼저 예외처리를 진행해보자.
일반화하기
하나의 테스트 작성시에 특정 값이 리턴되는지 확인하는데 처음에는 원하는 값을 리턴해주는 식으로 코드를 작성시켜 빠르게 테스트가 통과하는 것을 확인한다.
그 다음 같은 메서드를 테스트하는 코드에 다른 조건 값을 주어 해당 값으로도 테스트가 통과하게끔 하는 일반화 과정이 필요하다.
짧은 주기로 작성하기
개발시에 생각나는 모든 테스트를 한번에 진행하기보다 테스트 하나씩 진행하며 리팩토링을 진행하기
상황, 실행, 결과
같은 기능이여도 주어진 상황에 따라 다른 결과를 도출한다. 그렇다면 상황을 세팅하는게 중요한데 각 테스트별로 상황을 설정할 수도 있고 @BeforeEach를 사용하여 테스트가 실행될 때마다 공통된 조건값을 세팅할 수 있다.