From 9e1ad58e8c0e40ba42dd808256364d822a35473f Mon Sep 17 00:00:00 2001 From: Jimin Date: Thu, 18 Apr 2024 21:24:18 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=8A=94=20?= =?UTF-8?q?[]=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + ...355\212\270\353\212\224 []\353\213\244.md" | 53 +++++++++++++++++++ .../sample/cafekiosk/unit/CafeKioskTest.java | 7 +++ 3 files changed, 62 insertions(+) create mode 100644 "Testing/4. \355\205\214\354\212\244\355\212\270\353\212\224 []\353\213\244.md" diff --git a/README.md b/README.md index 71ece8d..1b58b0a 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ - [테스트는 왜 필요할까?](https://github.com/jmxx219/TIL/blob/main/Testing/1.%20%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%8A%94%20%EC%99%9C%20%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C%3F.md) - [단위 테스트](https://github.com/jmxx219/TIL/blob/main/Testing/2.%20%EB%8B%A8%EC%9C%84%20%ED%85%8C%EC%8A%A4%ED%8A%B8.md) +- [TDD](https://github.com/jmxx219/TIL/blob/main/Testing/3.%20TDD.md) +- [테스트는 [문서]다.](https://github.com/jmxx219/TIL/blob/main/Testing/4.%20%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%8A%94%20[]%EB%8B%A4.md)

diff --git "a/Testing/4. \355\205\214\354\212\244\355\212\270\353\212\224 []\353\213\244.md" "b/Testing/4. \355\205\214\354\212\244\355\212\270\353\212\224 []\353\213\244.md" new file mode 100644 index 0000000..d1ba1ec --- /dev/null +++ "b/Testing/4. \355\205\214\354\212\244\355\212\270\353\212\224 []\353\213\244.md" @@ -0,0 +1,53 @@ +## 테스트는 [문서]다. + + +### 문서 + +- 프로덕션 기능을 설명하는 테스트 코드 문서 +- 다양한 테스트 케이스를 통해 프로덕션 코드를 이해하는 시각과 관점을 보완 +- 어느 한 사람이 과거에 경험했던 고민의 결과물을 팀 차원으로 승격시켜서, 모두의 자산으로 공유할 수 있다. + - 테스트 코드가 팀 자산으로 공유할 수 있다는 장점이 존재한다. + +> 우리는 항상 팀으로 일하기 때문에 내가 작성한 코드, 테스트를 다른 팀원이 이해할 수 있도록 문서로 잘 정리해야 한다. + +
+ +### DisplayName은 섬세하게 + +> 테스트 함수가 하는 일을 더 상세하게 알려줄 수 있다. + + +- 명사의 나열보다 문장으로 작성하기 + - `~ 테스트`로 끝나는 설명은 지양하자 +- 테스트 **행위**에 대한 **결과**까지 기술하기 +- 도메인 용어를 사용하여 한 층 추상화된 내용을 담기 + - 메서드 자체의 관점보다 도메인 정책 관점으로 작성하기 + - ex) `우리 카페 키오스크의 영업 시작 시간`이라는 도메인 용어를 사용하기 +- 테스트의 현상을 중점으로 기술하지 말 것 + +
+ +### BDD(Behavior Driven Development) 스타일로 작성하기 + +- TDD에서 파생된 개발 방법 +- 함수 단위의 테스트에 집중하기보다 **시나리오에 기반한 테스트케이스(TC)** 자체에 집중하여 테스트한다. +- 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 추상화 수준(레벨)을 권장한다. + +
+ +#### Given / When / Then + +- Given : 시나리오 진행에 필요한 모든 준비 과정(객체, 값, 상태 등) +- When: 시나리오 행동 진행 +- Then: 시나리오 진행에 대한 결과 명시, 검증 + +> 어떤 환경에서(Given) 어떤 행동을 진행했을 때(When), 어떤 상태 변화가 일어난다(Then). +> 이렇게 정리해두면 DisplayName을 더 명확하게 작성할 수 있다. + +
+ +> `settings → gradle → Run tests using : Intellij IDEA`를 통해 테스트 코드를 실행하면 실행명이 `@DisplayName`으로 나온다. + + + + diff --git a/Testing/cafekiosk/src/test/java/sample/cafekiosk/unit/CafeKioskTest.java b/Testing/cafekiosk/src/test/java/sample/cafekiosk/unit/CafeKioskTest.java index c46ecbc..e6212e8 100644 --- a/Testing/cafekiosk/src/test/java/sample/cafekiosk/unit/CafeKioskTest.java +++ b/Testing/cafekiosk/src/test/java/sample/cafekiosk/unit/CafeKioskTest.java @@ -4,6 +4,7 @@ import java.time.LocalDateTime; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import sample.cafekiosk.unit.beverage.Americano; @@ -21,6 +22,8 @@ void add_manual_test() { System.out.println(">>> 담긴 음료: " + cafeKiosk.getBeverages().get(0).getName()); } + // @DisplayName("음료 1개 추가 테스트") + @DisplayName("음료 1개를 추가하면 주문 목록에 담긴다.") @Test void add() { CafeKiosk cafeKiosk = new CafeKiosk(); @@ -77,8 +80,10 @@ void clear() { assertThat(cafeKiosk.getBeverages()).isEmpty(); } + @DisplayName("주문 목록에 담긴 상품들의 총 금액을 계산할 수 있다.") @Test void calculateTotalPrice(){ + // given CafeKiosk cafeKiosk = new CafeKiosk(); Americano americano = new Americano(); Latte latte = new Latte(); @@ -86,8 +91,10 @@ void calculateTotalPrice(){ cafeKiosk.add(americano); cafeKiosk.add(latte); + // when int totalPrice = cafeKiosk.calculateTotalPrice(); + // then assertThat(totalPrice).isEqualTo(8500); }