필요성
정확한 프로그램을 만들기 위해서 생각할 수 있는 최대한의 경우의 수를 테스트 해보는 것이 당연히 유리하다. 그리고 이러한 테스트를 하나의 기능별로 구분해서 진행해본다면, 개발자가 명확한 논리를 갖게 되고 테스트를 하는 것이 쉬워진다. 또한 새로운 기능이 추가되거나 수정사항이 생기더라도 어떤 테스트에서 문제가 생겼는지 정확히 알 수 있고 유지보수하기가 편함을 상식적으로 알 수 있다.
위 방법대로 수행하는 것이 일반적이다. 그러나 TDD는 Test Driven Development로, 비즈니스 로직 -> 테스트 케이스 -> 메서드(실제 코드) 순으로 작성한다. 즉 메서드를 검증하기 위한 수단으로 테스트 코드를 작성하는 것이 아니라, 테스트 코드를 통과할 수 있는 소스 코드(메서드)를 짜는 방식으로 작성하는 것이다.
1. 비즈니스 로직을 정확히 정의한다.
하나의 기능을 구현하기 위해서 비즈니스 로직에 대해서 명확히 정의를 해야한다. 프로그래밍을 처음할 때는 readme 파일 등을 따로 만들어서 구현해야 하는 기능과 예외 사항 등을 명확히 정리해두어야 코드를 작성하기 용이하다.
input, output을 명기하고, 필요한 파라미터, URL, http method, 변수 validation, 핵심 로직 등을 적어놓는다.
2. 코드를 논리별로 세분화한다.
정의된 내용을 바탕으로 코드를 짠다. 각 번호는 향후 테스트 케이스로 시험하기 용이한 단위, 또는 논리적인 단위로 세분화하여 쪼개놓는다. 특정 값을 repository에서 받아오거나 변수 선언을 하는 부분을 분기점으로 하여 코드에 블록을 씌우고, intelliJ(windows)에서 Ctrl + Alt + M 을 누르면 하나의 함수로 쪼개어 표현할 수 있다.
3. 분리된 코드별로 테스트 케이스를 만들어 실행한다.
마지막으로 순서대로 분리된 코드별로 테스트 케이스를 만들고 실행하여 검증 단계를 거친다. 이미 논리별로 잘 구분해놓았기 때문에, 테스트 해야할 것이 명확하고 테스트 케이스의 추가도 용이하다.