RateDiscountPolicy
์ถ๊ฐ
discount/RateDiscountPolicy.java
import basic.springbasic.member.Grade;
import basic.springbasic.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;
}
}
}
test/RateDiscountPolicyTest.java
import basic.springbasic.member.Grade;
import basic.springbasic.member.Member;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
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
assertThat(discount).isEqualTo(1000); // static import๋ฅผ ํ๋๊ฒ ์ข๋ค
}
@Test
@DisplayName("VIP๊ฐ ์๋๋ฉด ํ ์ธ์ด ์ ์ฉ๋์ง ์์์ผ ํ๋ค")
void vip_x() {
// Given
Member member = new Member(2L, "memberBASIC", Grade.BASIC);
// When
int discount = discountPolicy.discount(member, 10000);
// Then
assertThat(discount).isEqualTo(0);
}
}
์๋ก์ด ์ ๋ฅ ํ ์ธ ์ ์ฑ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํด๋ณธ๋ค.
OrderServiceImpl.java
๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.public class OrderServiceImpl implements OrderService {
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
}