๐Ÿƒย ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ ์ดํ•ด2 - ๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ

์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ๊ฐœ๋ฐœ

RateDiscountPolicy ์ถ”๊ฐ€

Untitled

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;
        }
    }
}
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);
    }

}

์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ์ ์šฉ๊ณผ ๋ฌธ์ œ์ 

์ƒˆ๋กœ์šด ์ •๋ฅ  ํ• ์ธ ์ •์ฑ…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•ด๋ณธ๋‹ค.

public class OrderServiceImpl implements OrderService {
  //    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
      private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
  }