예제 4-10의 유닛 테스트는 겉으로 보기에 단순해 보여도 뒤에서는 많은 일이 진행되고 있습니다. 이것도 핵심적인 부분은 강조하고, 관련 없는 요소는 제거하는 추상화의 또 다른 예입니다. 분명히 말하지만, 관련이 없는 코드는 없습니다. 중요한 것은 테스트를 위해 ReservationDto, Reservation이나 FakeDatabase의 세부적인 내용까지 이해할 필요는 없다는 점입니다.
이 테스트는 준비, 행동, 어설션[9]을 휴리스틱 방식[92]으로 구성했으며, 빈 줄을 이용해서 각 단계를 구분했습니다. 준비 단계에서는 FakeDatabase와 SUT(System Under Test)를 생성합니다[66].
행동 단계에서는 데이터 전송 객체(DTO)[33]를 생성하고 이를 Post 메서드로 전달합니다. 물론 준비 단계에서 DTO를 만들 수도 있습니다. 어떤 방식을 사용해도 되지만, 저는 4.2.2절에서 이야기했던 것처럼 균형이 가장 잘 맞는 방식을 선택하는 편입니다. DTO 초기화를 준비 단계에 두면 3-1-2의 형태인데, 행동 단계에 두면 2-2-2 구조로 각 단계마다 2개의 문장을 둘 수 있기 때문에 조금 더 균형이 잘 맞습니다.