요구사항 키오스크 주문을 위한 상품 후보 리스트 조회하기 상품의 판매 상태: 판매중, 판매보류, 판매중시 판매중, 판매보류인 상태의 상품을 화면에 보여준다. id, 상품 번호, 상품 타입, 판매 상태, 상품 이름, 가격 엔티티 설계 @Entity @NoArgsConstructor(access = PROTECTED) @Getter public class Product { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private String productNumber; @Enumerated(STRING) private ProductType type; @Enumerated(STRING) private ProductSellingStatus selling..
Spring관련 기술/테스트코드
Layered Architecture 관심사의 분리! 책임을 나누고 유지보수하기 쉽게 만들어보자. 해서 시작한 것 A + B = AB? BA? C? 설명: A모듈과 B모듈이 결합하면서 어떤 결과가 나올지 모른다. 통합테스트(Integration test)가 필요하다. 통합테스트(Integration test) 여러 모듈이 협력하는 기능을 통합적으로 검증하는 테스트 일반적으로 작은 범위의 단위 테스트만으로는 기능 전체의 신뢰성을 보장할 수 없다. 풍부한 단위 테스트 & 큰 기능 단위를 검증하는 통합 테스트
BDD 롤프로게이머 BDD 는.. 아니다. TDD에서 파생된 개발방법 함수 단위의 테스트에 집중하기보다, 시나리오에 기반한 테스트케이스(TC) 자체에 집중하여 테스트한다. 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 추상화 수준(레벨)을 권장 GIVEN / WHEN / THEN Given: 시나리오 진행에 필요한 모든 준비 과정 (객체, 값, 상태 등) When: 시나리오 행동 진행 Then: 시나리오 진행에 대한 결과 명시, 검증 어떤 환경에서(Given) 어떤 행동을 진행했을 때(When) 어떤 상태 변화가 일어안다(Then) -> DisplayName에 명확하게 작성할 수 있다. given / when / then을 주석으로 달아주었다.! @DisplayName("주문 목록에 담긴 상품들의 총..
DisplayName을 섬세하게 작성하자 예시코드: https://github.com/beginner0107/cafekiosk/commit/69d8e3ff2bc2fecaa2a59c8355c51eb597e6b55a 테스트 코드 섬세하게 달기 · beginner0107/cafekiosk@69d8e3f beginner0107 committed Dec 12, 2023 github.com 간단하게 적어준다(X) @DisplayName("음료 1개 추가 테스트") @Test void add() { CafeKiosk cafeKiosk = new CafeKiosk(); cafeKiosk.add(new Americano()); assertThat(cafeKiosk.getBeverages()).hasSize(1); ass..
TDD 프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론 이게 무슨 이야기일까... (대충 경험상 테스트 코드를 먼저 짠다는게 이해가 안 간다) RED, GREEN, REFACTOR RED 실패하는 테스트 작성 프로덕션 코드(구현부) 없이 테스트를 작성하기 때문에 당연히 실패하기 마련.. 먼저 실행해서 빨간불을 봐라 GREEN 초록불을 보기 위해서라면 구현이 엉터리여도 된다.(!??) 테스트 통과, 최소한의 코딩 REFACTOR 구현 코드 개선 테스트 통과 유지 코드 구현 https://github.com/beginner0107/cafekiosk GitHub - beginner0107/cafekiosk: 테스트코드 연습 일지 테스트코드 연습 일지. Contribu..
요구사항 가게 운영 시간(10:00 ~ 22:00) 외에는 주문을 생성할 수 없다. 테스트 하기 어려운 영역이란? 관측할 때마다 다른 값에 의존하는 코드 현재 날짜/시간, 랜덤 값, 전역 변수/함수, 사용자 입력 등 외부 세계에 영향을 주는 코드 표준 출력, 메세지 발송, 데이터베이스에 기록하기 등 "현재 가게 운영 시간 외에는 주문을 생성할 수 없다" 라는 요구사항은 현재 시간이 계속 변경되기 때문에 관측할 때마다 다른 값에 의존하는 코드라고 볼 수 있다. 테스트 하기 쉬운 영역이란? 순수함수(pure functions) 같은 입력에는 항상 같은 결과 외부 세상과 단절된 형태(DB) 테스트하기 쉬운 코드 구현코드 https://github.com/beginner0107/cafekiosk/commit/8..