이번 시간에는,
할인 정책이 변경되었다고 가정하고 그 할인 정책에 맞게 코드를 수정해볼 것이다.
현재 코드는 VIP 고객에게 1000원을 할인해주는 방식으로 짜여져있는데,
오늘은 VIP 고객에게 구매 가격의 10%를 할인해주는 코드를 짤 것이다.
src > main > java > hello.core > discount 패키지 안에
DiscountPolicy를 implement하는 RateDiscountPolicy를 하나 만들어준다.
코드는 다음과 같이 채운다.
member 가 VIP라면 구매가격의 10%를 return하고, 그렇지 않으면 0을 리턴하는 함수를 만들었다.
여기서 기억할 것이 있다.
알고리즘 문제를 풀 때, 나눗셈 때문에 낭패를 본 경험이 있을 것이다. 나눗셈은 오차를 발생시킨다.
그러므로 퍼센티지를 기준으로 할인금액을 책정할 땐, 사실 이렇게 한 문장의 나눗셈으로 단순하게 처리해서는 안 된다. 고객의 구매금액이 얼마인지에 따라 오차가 발생할 수 있다. 이를 방지하기 위해 좀 더 세심한 로직을 짜고 테스트도 굉장히 많이 돌려야 한다.
하지만! 일단은 위처럼만 적고 넘어간다.
그 다음으로는 테스트를 진행한다.
여기서 매우 편리한 단축키가 하나 등장한다.
여기 함수 이름 discount에다가 커서를 올리고 ctrl+shift+T 를 누르면
이 함수의 테스트를 만들기 위한 버튼이 나타난다. 이 Create New Test... 를 클릭하면 아래와 같이
새 테스트를 만드는 창이 표시된다.
아무것도 건드리지 않고 OK를 누르기만 하면, RateDiscountPolicyTest라는 기본적인 테스트용 클래스가 알맞은 위치에 생성된다.
RateDiscountPolicyTest 뿐만 아니라 discount 패키지까지 만들어준 것이 보인다.
이제 새로 만들어진 이 파일에 내용을 채우면 된다. 테스트에 사용될 RateDiscountPolicy 객체부터 만들어놓자.
먼저 VIP 고객이 할인을 요청한 경우의 테스트를 만들어보자.
VIP 고객이 10000원의 구매금액을 지불할 때에 1000원을 할인해야 한다는 계산 결과가 잘 도출되는지 확인하는 테스트이다.
이번에 처음 알게 된 @DisplayName() 어노테이션은, 테스트 Run 창에 표시될 문자열을 지정하는 역할을 한다. 이게 없으면 기본적으로 함수의 이름이 표시된다.
실행을 시켜보면
정상적으로 pass되어 초록불이 들어오고, 이름도 "VIP gets 10% discount"라고 잘 표시된다.
다음으로는 VIP가 아닌 고객의 경우를 테스트해보자.
강사님께서는 할인금액이 1000인지를 assert하여, 초록불이 안 들어오는 것을 정상으로 여기는 테스트를 짜셨다.
그런데 나는 아무래도... 모든 테스트가 초록불이 들어와야 마음이 편해서... 할인금액이 0인지를 assert하는 코드로 짜보겠다.
이렇게 짜주었다.
실행을 시켜보자.
pass 된다.
강사님처럼 assertThat(discount).isEqualTo(1000); 을 한다면?
1000을 기대했는데 실제 값은 0이므로 초록불이 들어오지 않는다. 하지만 우리가 이것을 바라는 상황이므로 문제가 없다.
두 테스트를 한꺼번에 돌려보아도 잘 pass된다.
'스프링 공부 > 인프런 김영한 스프링 핵심 원리 - 기본편 노트정리' 카테고리의 다른 글
2-8. 주문과 할인 도메인 실행과 테스트 (2) | 2022.09.04 |
---|---|
2-7. 주문과 할인 도메인 개발 (0) | 2022.09.04 |
2-6. 주문과 할인 도메인 설계 (0) | 2022.09.03 |
2-5. 회원 도메인 실행과 테스트 (0) | 2022.09.01 |
2-4. 회원 도메인 개발 (0) | 2022.08.22 |