입력 & 결과 도출 → 기능 명세 구체화 → 코드 반영
ex. 로그인
ex. 만료일 계산 기능
// payData 인자: 만료일 계산 기능 입력
// return값: 만료일 계산 기능 결과
LocalDate realExpiryDate = cal.calculateExpiryDate(payData);
public void login(String id, String pw) {
User user = getUser(id);
if (!user.matchPassword(pw)) {
// 익셉션을 결과로 사용
throw new IdPwNotMatchException();
}
...;
}
ex. 회원 가입 기능
→ 동일 ID O → DuplicateIdException
→ X → 회원 일련 번호 return, 회원 정보 DB 저장
시스템의 상태 변경: return 값으로 결과 알 수 X → 테스트 대상 실행 후 변경 대상 접근해서 결과 확인 ex. DB 테이블 조회해서 데이터 올바르게 삽입됐는지 확인
테스트 코드 작성
테스트를 통과할 만큼만 코드 작성/ 필요할 것으로 예측해서 미리 코드 작성 X
ex. 만료일 계산
입력: 납부일, 납부액
// 최초 설계: 2개 파라미터
LocalDate expiryDate = cal.calculateExpiryDate(billingDate, payAmount);
첫 납부일 추가
// 테스트를 진행하는 과정에서 필요한 만큼 설계 반영
PayData payData = PayData.builder()
.firstBillingDate(LocalDate.of(2019, 1, 31))
.billingDate(LocalDate.of(2019, 2, 28))
.payAmount(10_000)
.build();
LocalDate expiryDate = cal.calculateExpiryDate(payData);