새로운 할인 정책을 확장해보았다.
개발도중 기획자에 의해서 고정할인 금액이 아니라
주문 금액당 할인하는 정률할인으로 변경하고 싶다고 요구하였다.
새로운 정률할인 정책을 추가하였다.
package hello.core.discount;
import hello.core.member.Grade;
import hello.core.member.Member;
public class RateDiscountPolicy implements DiscountPolicy{
private int discountPercent = 10;
@Override
public int discount(Member member, int price) {
if(member.getGrade() == Grade.VIP){
return price * discountPercent / 100;
} else{
return 0;
}
}
}
DiscountPolicy를 implements 한 RateDiscountPolicy 클래스를 만들고
VIP라면 10% 할인한 할인가를 리턴한다.
package hello.core.discount;
import hello.core.member.Grade;
import hello.core.member.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class RateDiscountPolicyTest {
RateDiscountPolicy discountPolicy = new RateDiscountPolicy();
@Test
@DisplayName("VIP는 10% 할인이 적용되어야 한다.")
void vip_o() {
//given
Member member = new Member(1L,"memberVIP", Grade.VIP);
//when
int discount = discountPolicy.discount(member, 10000);
//then
Assertions.assertThat(discount).isEqualTo(1000);
}
@Test
@DisplayName("VIP가 아니면 할인이 적용되지 않아야 한다.")
void vip_x() {
//given
Member member = new Member(2L,"memberVIP", Grade.BASIC);
//when
int discount = discountPolicy.discount(member, 10000);
//then
Assertions.assertThat(discount).isEqualTo(1000);
}
}
Junit을 이용해 역시 테스트 케이스들을 작성해보았다.
vip_o()메서드는 vip일때 잘 동작하는지 확인하고
vip_x()메서드는 vip가 아니라면 어떻게 되는지 확인하는 테스트이다.
@DisplayName 을 쓰면 한글을 적을 수 있다.! Junit5부터 가능!
vip_x() 메서드에 1000원을 비교해보니
기대값은 1000원이지만
실제는 0이었다라고 확인할 수 있었다.
'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글
11. 관심사의 분리 (0) | 2021.07.13 |
---|---|
10. 새로운 할인 정책 적용과 문제점 (0) | 2021.07.13 |
8. 주문과 할인 도메인 실행과 테스트 (0) | 2021.07.08 |
7. 주문과 할인 도메인 개발 (0) | 2021.07.08 |
6. 주문과 할인 도메인 설계 (0) | 2021.07.08 |