테스트는 문서다.
•
프로덕션 기능을 설명하는 테스트 코드 문서
•
다양한 테스트 케이스를 통해 프로덕션 코드를 이해하는 시각과 관점을 보완
•
어느 한 사람이 과거에 경험했던 고민의 결과물을 팀 차원으로 승격시켜서, 모두의 자산으로 공유할 수 있음
DisplayName을 섬세하게
@DisplayName("음료 1개 추가 테스트")
@Test
public void add() {
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
assertThat(cafeKiosk.getBeverages()).hasSize(1);
assertThat(cafeKiosk.getBeverages().get(0).getName()).isEqualTo("아메리카노");
}
// 처음 보는 입장에서는 자세하게 적어줘야 이해가 잘 됨
@DisplayName("음료 1개를 추가하면 주문 목록에 담긴다.")
@Test
public void add() {
CafeKiosk cafeKiosk = new CafeKiosk();
cafeKiosk.add(new Americano());
assertThat(cafeKiosk.getBeverages()).hasSize(1);
assertThat(cafeKiosk.getBeverages().get(0).getName()).isEqualTo("아메리카노");
}
Java
복사
•
DisplayName을 IDE에서 확인할 수 있음
•
정리 1
◦
음료 1개 추가 테스트 → 음료를 1개 추가할 수 있다.
◦
명사의 나열보다 문장으로
▪
A이면 B이다.
▪
A이면 B가 아니고 C다.
▪
“~테스트” 표현을 지양하는 것이 좋다.
•
정리 2
◦
음료를 1개 추가할 수 있다. → 음료를 1개 추가하면 주문 목록에 담긴다.
◦
테스트 행위에 대한 결과까지 기술한다.
•
정리 3
◦
특정 시간 이전에 주문을 생성하면 실패한다. → 영업 시작 시간 이전에는 주문을 생성할 수 없다.
◦
도메인 용어를 사용하여 한층 추상화된 내용을 담는다.
◦
메서드 자체의 관점보다는 도메인 정책 관점으로 DisplayName을 작성하는 것이 좋다.
◦
테스트의 현상을 중점으로 기술하지 말자.
BDD 스타일로 작성하기
•
BDD, Behavior Driven Development
◦
TDD에서 파생된 개발 방법이다.
◦
함수 단위의 테스트에 집중하기보다, 시나리오에 기반한 테스트케이스(TC) 자체에 집중하여 테스트한다.
◦
개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 추상화 수준(레벨)을 권장한다.
•
Given / When / Then
◦
Given : 시나리오 진행에 필요한 모든 준비 과정 (객체, 값, 상태 등)
◦
When : 시나리오 행동 진행
◦
Then : 시나리오 진행에 대한 결과 명시, 검증
◦
어떤 환경에서(Given), 어떤 행동을 진행했을 때(When), 어떤 상태 변화가 일어난다(Then).
▪
DisplayName에 명확하게 작성할 수 있다.