From c5d4990bdffba8b15962a2a812ba9e043284c8ac Mon Sep 17 00:00:00 2001 From: yesjehmi Date: Sun, 24 Mar 2019 23:15:15 +0900 Subject: [PATCH 1/5] =?UTF-8?q?1.=20LottoNumbers.class,=20Number.class=20?= =?UTF-8?q?=20=20=20-=20=EC=9D=BC=EA=B8=89=EC=BB=AC=EB=A0=89=EC=85=98=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=202.=20LottoResultStatus=20Enum=20bonus?= =?UTF-8?q?=ED=95=AD=EB=AA=A9=20=EC=B6=94=EA=B0=80=203.=20Price=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EB=8D=94=20=EC=A0=81=ED=95=A9=ED=95=9C=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20>=20Money.class=204.=20LottoResult.class?= =?UTF-8?q?=20=20=20=20-=20=EB=A9=A4=EB=B2=84=EB=B3=80=EC=88=98=202?= =?UTF-8?q?=EA=B0=9C=20=EC=9D=B4=ED=95=98=EB=A1=9C=20=EB=91=90=EA=B8=B0?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=88=98=20=EB=B3=80=EC=88=98=20(be?= =?UTF-8?q?nefitRate)=20=EC=82=AD=EC=A0=9C=205.=20=EB=8B=B9=EC=B2=A8?= =?UTF-8?q?=EB=B2=88=ED=98=B8+=EB=B3=B4=EB=84=88=EC=8A=A4=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EA=B4=80=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?WinningLotto.class=20=EC=B6=94=EA=B0=80=206.=20class=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD,=20=EC=B6=94=EA=B0=80=EC=97=90?= =?UTF-8?q?=20=EB=94=B0=EB=A5=B8=20test=20class=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/MainApplication.java | 14 ++++---- src/main/java/domain/Lotto.java | 22 +++++++----- src/main/java/domain/LottoGame.java | 11 ++---- src/main/java/domain/LottoGenerator.java | 1 + src/main/java/domain/LottoNumbers.java | 30 ++++++++++++++++ src/main/java/domain/LottoResult.java | 23 +++++-------- src/main/java/domain/LottoResultStatus.java | 27 ++++++++------- .../java/domain/{Price.java => Money.java} | 8 +++-- src/main/java/domain/Number.java | 21 ++++++++++++ src/main/java/domain/Numbers.java | 20 ----------- src/main/java/domain/WinningLotto.java | 26 ++++++++++++++ src/main/java/view/InputView.java | 7 ++++ src/main/java/view/ResultView.java | 17 ++++++---- src/test/java/domain/LottoGameTest.java | 17 ++++------ src/test/java/domain/LottoNumbersTest.java | 29 ++++++++++++++++ .../java/domain/LottoResultStatusTest.java | 28 +++++++-------- src/test/java/domain/LottoResultTest.java | 18 +++++----- src/test/java/domain/LottoTest.java | 34 +++++++++++++------ .../domain/{PriceTest.java => MoneyTest.java} | 15 +++++--- src/test/java/domain/NumberTest.java | 26 ++++++++++++++ 20 files changed, 266 insertions(+), 128 deletions(-) create mode 100644 src/main/java/domain/LottoNumbers.java rename src/main/java/domain/{Price.java => Money.java} (75%) create mode 100644 src/main/java/domain/Number.java delete mode 100644 src/main/java/domain/Numbers.java create mode 100644 src/main/java/domain/WinningLotto.java create mode 100644 src/test/java/domain/LottoNumbersTest.java rename src/test/java/domain/{PriceTest.java => MoneyTest.java} (66%) create mode 100644 src/test/java/domain/NumberTest.java diff --git a/src/main/java/MainApplication.java b/src/main/java/MainApplication.java index b242d25d0c9..fbaafe478bc 100644 --- a/src/main/java/MainApplication.java +++ b/src/main/java/MainApplication.java @@ -1,6 +1,7 @@ import domain.LottoGame; import domain.LottoResult; -import domain.Price; +import domain.Money; +import domain.WinningLotto; import view.InputView; import view.ResultView; @@ -9,13 +10,14 @@ public class MainApplication { public static void main(String[] args) { int moneyAmount = InputView.getAmount(); - Price price = new Price(moneyAmount); + Money money = new Money(moneyAmount); - LottoGame lottoGame = new LottoGame(price.ticketCount()); + LottoGame lottoGame = new LottoGame(money.ticketCount()); ResultView.printLottos(lottoGame); - String winningNumbers = InputView.getWinningNumbers(); - LottoResult result = lottoGame.playingLotto(winningNumbers, price); - ResultView.printLottoResult(result); + WinningLotto winningLotto = new WinningLotto(InputView.getWinningNumbers(), InputView.getBonusNumber()); + LottoResult result = lottoGame.playingLotto(winningLotto); + + ResultView.printLottoResult(result, money); } } diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index 152712d9d01..1ae2e6f6487 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -3,26 +3,32 @@ import java.util.List; public class Lotto { - private Numbers numbers; + private static final int BONUS_AVAILABLE_MATCH_COUNT = 5; + private LottoNumbers lottoNumbers; public static Lotto generateLotto(List integers) { Lotto lotto = new Lotto(); - lotto.numbers = new Numbers(integers); + lotto.lottoNumbers = new LottoNumbers(integers); return lotto; } - public LottoResultStatus getLottoResultStatus(int[] winningNumbers) { + public LottoResultStatus getLottoResultStatus(WinningLotto winningLotto) { int containsWinningNumberCount = 0; - for (int number : winningNumbers) { - if(numbers.contains(number)) + boolean bonusYn = false; + for (int number : winningLotto.getWinningNumber()) { + if(lottoNumbers.contains(number)) containsWinningNumberCount ++; } - return LottoResultStatus.findByMatchCount(containsWinningNumberCount); + if( containsWinningNumberCount == BONUS_AVAILABLE_MATCH_COUNT && lottoNumbers.contains(winningLotto.getBonusNumber())) { + bonusYn = true; + } + + return LottoResultStatus.findByMatchCount(containsWinningNumberCount, bonusYn); } - public Numbers getNumbers() { - return this.numbers; + public LottoNumbers getLottoNumbers() { + return this.lottoNumbers; } } diff --git a/src/main/java/domain/LottoGame.java b/src/main/java/domain/LottoGame.java index cbc79650813..e92e2e60dca 100644 --- a/src/main/java/domain/LottoGame.java +++ b/src/main/java/domain/LottoGame.java @@ -20,18 +20,11 @@ public LottoGame(int lottoCount) { } } - public LottoResult playingLotto(String inputWinningNumbers, Price price) { - int[] intWinningNumbers = convertingWinningNumbers(inputWinningNumbers); - LottoResult lottoGameResult = new LottoResult(lottos, intWinningNumbers); - lottoGameResult.calculateBenefit(price); + public LottoResult playingLotto(WinningLotto winningLotto) { + LottoResult lottoGameResult = new LottoResult(lottos, winningLotto); return lottoGameResult; } - public int[] convertingWinningNumbers(String winningNumbers) { - String[] stringWinningNumbers = winningNumbers.replace(" ","").split(","); - return Arrays.stream(stringWinningNumbers).mapToInt(str-> Integer.parseInt(str)).toArray(); - } - public List lottos() { return lottos; } diff --git a/src/main/java/domain/LottoGenerator.java b/src/main/java/domain/LottoGenerator.java index 94a1f312f9c..61c800addd0 100644 --- a/src/main/java/domain/LottoGenerator.java +++ b/src/main/java/domain/LottoGenerator.java @@ -32,6 +32,7 @@ private static List makeLottoNumberRange() { lottoNumberRange.add(i); i ++; } + return lottoNumberRange; } } diff --git a/src/main/java/domain/LottoNumbers.java b/src/main/java/domain/LottoNumbers.java new file mode 100644 index 00000000000..67da34cde04 --- /dev/null +++ b/src/main/java/domain/LottoNumbers.java @@ -0,0 +1,30 @@ +package domain; + +import java.util.List; +import java.util.stream.Collectors; + +public class LottoNumbers { + private static final int LOTTO_NUMBER_SIZE = 6; + private List numbers; + + public LottoNumbers(List numbers) { + if (numbers.size() != LOTTO_NUMBER_SIZE) { + throw new IllegalArgumentException(); + } + + this.numbers = numbers.stream().map(Number::new).collect(Collectors.toList()); + } + + public boolean contains(int number) { + return numbers.stream().map(num -> num.numberCompare(number)).collect(Collectors.toList()) + .contains(true); + } + + public String toString() { + StringBuffer resultString = new StringBuffer(); + resultString.append("["); + numbers.forEach(number -> resultString.append(number.toString()+" ")); + resultString.append("]"); + return resultString.toString(); + } +} diff --git a/src/main/java/domain/LottoResult.java b/src/main/java/domain/LottoResult.java index dca63b15af9..3ed2122c008 100644 --- a/src/main/java/domain/LottoResult.java +++ b/src/main/java/domain/LottoResult.java @@ -1,21 +1,16 @@ package domain; - import java.math.BigDecimal; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class LottoResult { - private List lottos; private Map lottoResults; - private BigDecimal benefitRate; - public LottoResult(List lottos, int[] winningNumbers) { + public LottoResult(List lottos, WinningLotto winningNumbers) { this.lottos = lottos; - this.benefitRate = BigDecimal.valueOf(0); this.lottoResults = new HashMap<>(); initMap(); lottos.stream() @@ -37,20 +32,20 @@ private void updateLottoResult(LottoResultStatus status) { lottoResults.put(status, lottoResults.get(status) + 1); } - public Map getLottoResults() { - return lottoResults; + public Integer getLottoResult(LottoResultStatus resultStatus) { + if (lottoResults.get(resultStatus) == null) { + return 0; + } + + return lottoResults.get(resultStatus); } - public void calculateBenefit(Price price) { + public BigDecimal calculateBenefit(Money money) { BigDecimal totalAmountByWinning = new BigDecimal(0); for(LottoResultStatus status : LottoResultStatus.values()){ totalAmountByWinning = totalAmountByWinning.add(LottoResultStatus.getWinnersPriceByStatus(lottoResults.get(status), status)); } - benefitRate = price.totalRateByWinning(totalAmountByWinning); - } - - public BigDecimal getBenefitRate() { - return benefitRate; + return money.totalRateByWinning(totalAmountByWinning); } } diff --git a/src/main/java/domain/LottoResultStatus.java b/src/main/java/domain/LottoResultStatus.java index 5f42f03edd6..fd5ebc52630 100644 --- a/src/main/java/domain/LottoResultStatus.java +++ b/src/main/java/domain/LottoResultStatus.java @@ -5,34 +5,37 @@ import java.util.List; public enum LottoResultStatus { - NONE(Arrays.asList(0,1,2), 0L), - WINNING_NUM_3(Arrays.asList(3), 5_000L), - WINNING_NUM_4(Arrays.asList(4), 50_000L), - WINNING_NUM_5(Arrays.asList(5), 150_000L), - WINNING_NUM_6(Arrays.asList(6), 2_000_000_000L); + NONE(Arrays.asList(0,1,2), false, 0L), + WINNING_NUM_3(Arrays.asList(3), false, 5_000L), + WINNING_NUM_4(Arrays.asList(4), false, 50_000L), + WINNING_NUM_5(Arrays.asList(5), false, 1_500_000L), + WINNING_NUM_5_BONUS(Arrays.asList(5), true, 1_500_000L), + WINNING_NUM_6(Arrays.asList(6), false, 2_000_000_000L); private List matchCounts; + private boolean bonusMatchYn; private Long winnersPrice; - LottoResultStatus(List matchCount, Long winnersPrice) { + LottoResultStatus(List matchCount, boolean bonusMatchYn, Long winnersPrice) { this.matchCounts = matchCount; + this.bonusMatchYn = bonusMatchYn; this.winnersPrice = winnersPrice; } - public static LottoResultStatus findByMatchCount(int matchCount) { + public static LottoResultStatus findByMatchCount(int matchCount, boolean bonusYn) { return Arrays.stream(LottoResultStatus.values()) - .filter(matchCountGroup -> matchCountGroup.hasMatchCount(matchCount)) + .filter(matchCountGroup -> matchCountGroup.hasMatchCount(matchCount, bonusYn)) .findAny() .orElse(NONE); } - public boolean hasMatchCount(Integer integer) { - return matchCounts.contains(integer); + public boolean hasMatchCount(Integer matchCount, boolean bonusYn) { + return this.matchCounts.contains(matchCount) && this.bonusMatchYn == bonusYn; } - public static BigDecimal getWinnersPriceByStatus(int matchCount, LottoResultStatus status) { - return BigDecimal.valueOf(matchCount * status.winnersPrice); + public static BigDecimal getWinnersPriceByStatus(int lottoCount, LottoResultStatus status) { + return BigDecimal.valueOf(lottoCount * status.winnersPrice); } } diff --git a/src/main/java/domain/Price.java b/src/main/java/domain/Money.java similarity index 75% rename from src/main/java/domain/Price.java rename to src/main/java/domain/Money.java index f45b3f933e7..f3aa2e8de7f 100644 --- a/src/main/java/domain/Price.java +++ b/src/main/java/domain/Money.java @@ -3,12 +3,16 @@ import java.math.BigDecimal; import java.math.RoundingMode; -public class Price { +public class Money { private static final int ONE_TICKET_PRICE = 1_000; private int totalAmount; - public Price(int amount) { + public Money(int amount) { + if (amount < ONE_TICKET_PRICE) { + throw new IllegalArgumentException(); + } + totalAmount = amount; } diff --git a/src/main/java/domain/Number.java b/src/main/java/domain/Number.java new file mode 100644 index 00000000000..84875038efa --- /dev/null +++ b/src/main/java/domain/Number.java @@ -0,0 +1,21 @@ +package domain; + +public class Number { + private Integer number; + + public Number(Integer number) { + if (number < 1 || number > 46) { + throw new IllegalArgumentException(); + } + this.number = number; + } + + @Override + public String toString() { + return Integer.toString(number); + } + + public boolean numberCompare(Integer number) { + return this.number == number; + } +} diff --git a/src/main/java/domain/Numbers.java b/src/main/java/domain/Numbers.java deleted file mode 100644 index 09335264b9a..00000000000 --- a/src/main/java/domain/Numbers.java +++ /dev/null @@ -1,20 +0,0 @@ -package domain; - -import java.util.List; - -public class Numbers { - private List numbers; - - public Numbers(List numbers) { - this.numbers = numbers; - } - - public boolean contains(int number) { - return numbers.contains(number); - } - - @Override - public String toString() { - return numbers.toString(); - } -} diff --git a/src/main/java/domain/WinningLotto.java b/src/main/java/domain/WinningLotto.java new file mode 100644 index 00000000000..478317e8d2e --- /dev/null +++ b/src/main/java/domain/WinningLotto.java @@ -0,0 +1,26 @@ +package domain; + +import java.util.Arrays; + +public class WinningLotto { + private int[] winningNumber; + private int bonusNumber; + + public WinningLotto(String inputWinnigNumber, int bonusNumber) { + this.winningNumber = convertToInt(inputWinnigNumber); + this.bonusNumber = bonusNumber; + } + + private int[] convertToInt(String inputWinningNumber) { + String[] stringWinningNumbers = inputWinningNumber.replace(" ","").split(","); + return Arrays.stream(stringWinningNumbers).mapToInt(str-> Integer.parseInt(str)).toArray(); + } + + public int[] getWinningNumber() { + return winningNumber; + } + + public int getBonusNumber() { + return bonusNumber; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index a9a39cbf78d..df993808e15 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -17,4 +17,11 @@ public static String getWinningNumbers() { String winningNumbers = scanner.nextLine(); return winningNumbers; } + + public static int getBonusNumber() { + System.out.println("보너스 볼을 입력해 주세요."); + Scanner scanner = new Scanner(System.in); + int bonusNumber = scanner.nextInt(); + return bonusNumber; + } } diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 0532becf9b0..0ceb0384edb 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -3,21 +3,24 @@ import domain.LottoGame; import domain.LottoResult; import domain.LottoResultStatus; +import domain.Money; public class ResultView { public static void printLottos(LottoGame result) { result.lottos().forEach(lotto -> { - System.out.println(lotto.getNumbers().toString()); + System.out.println(lotto.getLottoNumbers().toString()); }); } - public static void printLottoResult(LottoResult lottoResult) { + public static void printLottoResult(LottoResult lottoResult, Money money) { System.out.println("당첨 통계"); System.out.println("---------"); - System.out.println("3개 일치 (5000원)- " +lottoResult.getLottoResults().get(LottoResultStatus.WINNING_NUM_3)+ "개"); - System.out.println("4개 일치 (50000)- " +lottoResult.getLottoResults().get(LottoResultStatus.WINNING_NUM_4)+ "개"); - System.out.println("5개 일치 (1500000원)- " +lottoResult.getLottoResults().get(LottoResultStatus.WINNING_NUM_5)+ "개"); - System.out.println("6개 일치 (2000000원)- " +lottoResult.getLottoResults().get(LottoResultStatus.WINNING_NUM_6)+ "개\n"); - System.out.println("총 수익률은 "+lottoResult.getBenefitRate()+ "입니다. "); + System.out.println("3개 일치 (5,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_3)+ "개"); + System.out.println("4개 일치 (50,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_4)+ "개"); + System.out.println("5개 일치 (1,500,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_5)+ "개"); + System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_5_BONUS)+ "개"); + System.out.println("6개 일치 (2,000,000,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_6)+ "개"); + System.out.println(); + System.out.println("총 수익률은 "+lottoResult.calculateBenefit(money)+ "입니다. "); } } diff --git a/src/test/java/domain/LottoGameTest.java b/src/test/java/domain/LottoGameTest.java index 40331b01d1f..85aca7e32d4 100644 --- a/src/test/java/domain/LottoGameTest.java +++ b/src/test/java/domain/LottoGameTest.java @@ -9,25 +9,20 @@ public class LottoGameTest { private static final int AMOUNT = 14_000; private static final int PRICE = 1_000; private static final int LOTTO_COUNT = AMOUNT / PRICE; + public static final String WINNING_NUMBERS = "1, 2, 3, 4, 5, 6"; private LottoGame lottoGame; - private Price price; + private Money money; @Before public void setUp() { - price = new Price(AMOUNT); + money = new Money(AMOUNT); lottoGame = new LottoGame(LOTTO_COUNT); } - @Test - public void 입력된_STRING_ARRAY_INT_ARRAY로_CONVERTING() { - String winningNumbers = "1, 2, 3, 4, 5, 6"; - int[] intWinningNumbers = {1,2,3,4,5,6}; - assertThat(lottoGame.convertingWinningNumbers(winningNumbers)).isEqualTo(intWinningNumbers); - } - @Test public void 금액에_맞는_LOTTO_갯수가_생성_되었는가() { - String winningNumbers = "1, 2, 3, 4, 5, 6"; - assertThat(lottoGame.playingLotto(winningNumbers, price).getLottos().size()).isEqualTo(LOTTO_COUNT); + String winningNumbers = LottoGameTest.WINNING_NUMBERS; + int bonusNumber = 7; + assertThat(lottoGame.playingLotto(new WinningLotto(winningNumbers, bonusNumber)).getLottos().size()).isEqualTo(LOTTO_COUNT); } } diff --git a/src/test/java/domain/LottoNumbersTest.java b/src/test/java/domain/LottoNumbersTest.java new file mode 100644 index 00000000000..187bc69e64b --- /dev/null +++ b/src/test/java/domain/LottoNumbersTest.java @@ -0,0 +1,29 @@ +package domain; + +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class LottoNumbersTest { + private LottoNumbers lottoNumbers; + + @Before + public void SET_UP() { + List numbers = Arrays.asList(1,2,3,4,5,6); + lottoNumbers = new LottoNumbers(numbers); + } + + @Test + public void 로또번호에_winning번호_포함되어있음() { + assertThat(lottoNumbers.contains(1)).isEqualTo(true); + } + + @Test + public void 로또번호에_winning번호_미포함되어있음() { + assertThat(lottoNumbers.contains(10)).isEqualTo(false); + } +} diff --git a/src/test/java/domain/LottoResultStatusTest.java b/src/test/java/domain/LottoResultStatusTest.java index 43594bf2357..6118351354f 100644 --- a/src/test/java/domain/LottoResultStatusTest.java +++ b/src/test/java/domain/LottoResultStatusTest.java @@ -7,37 +7,35 @@ public class LottoResultStatusTest { @Test - public void 당첨번호에_따른_상태_확인_당첨X_0개() { - assertThat(LottoResultStatus.findByMatchCount(0)).isEqualTo(LottoResultStatus.NONE); + public void 당첨번호에_따른_상태_확인_당첨X() { + assertThat(LottoResultStatus.findByMatchCount(0, false)).isEqualTo(LottoResultStatus.NONE); + assertThat(LottoResultStatus.findByMatchCount(1, false)).isEqualTo(LottoResultStatus.NONE); + assertThat(LottoResultStatus.findByMatchCount(2, false)).isEqualTo(LottoResultStatus.NONE); } @Test - public void 당첨번호에_따른_상태_확인_당첨X_1개() { - assertThat(LottoResultStatus.findByMatchCount(1)).isEqualTo(LottoResultStatus.NONE); + public void 당첨번호에_따른_상태_확인_당첨3() { + assertThat(LottoResultStatus.findByMatchCount(3, false)).isEqualTo(LottoResultStatus.WINNING_NUM_3); } @Test - public void 당첨번호에_따른_상태_확인_당첨X_2개() { - assertThat(LottoResultStatus.findByMatchCount(2)).isEqualTo(LottoResultStatus.NONE); + public void 당첨번호에_따른_상태_확인_당첨4() { + assertThat(LottoResultStatus.findByMatchCount(4, false)).isEqualTo(LottoResultStatus.WINNING_NUM_4); } @Test - public void 당첨번호에_따른_상태_확인_당첨3() { - assertThat(LottoResultStatus.findByMatchCount(3)).isEqualTo(LottoResultStatus.WINNING_NUM_3); + public void 당첨번호에_따른_상태_확인_당첨5() { + assertThat(LottoResultStatus.findByMatchCount(5, false)).isEqualTo(LottoResultStatus.WINNING_NUM_5); } @Test - public void 당첨번호에_따른_상태_확인_당첨4() { - assertThat(LottoResultStatus.findByMatchCount(4)).isEqualTo(LottoResultStatus.WINNING_NUM_4); + public void 당첨번호에_따른_상태_확인_당첨5_보너스번호_당첨() { + assertThat(LottoResultStatus.findByMatchCount(5, true)).isEqualTo(LottoResultStatus.WINNING_NUM_5_BONUS); } - @Test - public void 당첨번호에_따른_상태_확인_당첨5() { - assertThat(LottoResultStatus.findByMatchCount(5)).isEqualTo(LottoResultStatus.WINNING_NUM_5); - } @Test public void 당첨번호에_따른_상태_확인_당첨6() { - assertThat(LottoResultStatus.findByMatchCount(6)).isEqualTo(LottoResultStatus.WINNING_NUM_6); + assertThat(LottoResultStatus.findByMatchCount(6, false)).isEqualTo(LottoResultStatus.WINNING_NUM_6); } } diff --git a/src/test/java/domain/LottoResultTest.java b/src/test/java/domain/LottoResultTest.java index f8a1c13af5a..804fb7a03df 100644 --- a/src/test/java/domain/LottoResultTest.java +++ b/src/test/java/domain/LottoResultTest.java @@ -11,14 +11,15 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class LottoResultTest { - private static final int totalAmount = 1_000; - private static final int[] inputWinningNumbers = {1,3,5,6,7,8}; + private static final int TOTAL_AMOUNT = 1_000; + private static final String INPUT_WINNING_NUMBERS = "1,3,5,6,7,8"; + private static final int INPUT_BONUs_NUMBER = 9; private LottoResult lottoResult; - private Price price; + private Money money; @Before public void setUp() { - price = new Price(totalAmount); + money = new Money(TOTAL_AMOUNT); //3장 중 1장만 1등으로 되도록 확인. List lottoNumbers= Arrays.asList(1,3,5,6,7,8); @@ -29,13 +30,12 @@ public void setUp() { , Lotto.generateLotto(lottoNumbers2) , Lotto.generateLotto(lottoNumbers3)); - lottoResult = new LottoResult(lottos, inputWinningNumbers); + lottoResult = new LottoResult(lottos, new WinningLotto(INPUT_WINNING_NUMBERS, INPUT_BONUs_NUMBER)); } @Test - public void LOTTO_RESULT_() { - lottoResult.calculateBenefit(price); - assertThat(lottoResult.getBenefitRate()) - .isEqualTo(LottoResultStatus.getWinnersPriceByStatus(1, LottoResultStatus.WINNING_NUM_6).divide(BigDecimal.valueOf(totalAmount), 2, RoundingMode.HALF_UP)); + public void 로또_수익률_계산() { + assertThat(lottoResult.calculateBenefit(money)) + .isEqualTo(LottoResultStatus.getWinnersPriceByStatus(1, LottoResultStatus.WINNING_NUM_6).divide(BigDecimal.valueOf(TOTAL_AMOUNT), 2, RoundingMode.HALF_UP)); } } diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/domain/LottoTest.java index dbe7d58421e..2334ae5d7c0 100644 --- a/src/test/java/domain/LottoTest.java +++ b/src/test/java/domain/LottoTest.java @@ -7,6 +7,7 @@ import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.fail; public class LottoTest { private Lotto lotto; @@ -23,31 +24,44 @@ public void setUp() { @Test public void 당첨번호에_따른_상태_확인_당첨X() { - int[] winningNums = {1,2,7,8,9,10}; - assertThat(lotto.getLottoResultStatus(winningNums)).isEqualTo(LottoResultStatus.NONE); + String winningNums = "1,2,7,8,9,10"; + int bonusNum = 45; + + assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.NONE); } @Test public void 당첨번호에_따른_상태_확인_3개_일치() { - int[] winningNums = {1,2,3,8,9,10}; - assertThat(lotto.getLottoResultStatus(winningNums)).isEqualTo(LottoResultStatus.WINNING_NUM_3); + String winningNums = "1,2,3,8,9,10"; + int bonusNum = 45; + assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_3); } @Test public void 당첨번호에_따른_상태_확인_4개_일치() { - int[] winningNums = {1,2,3,4,9,10}; - assertThat(lotto.getLottoResultStatus(winningNums)).isEqualTo(LottoResultStatus.WINNING_NUM_4); + String winningNums = "1,2,3,4,9,10"; + int bonusNum = 45; + assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_4); } @Test public void 당첨번호에_따른_상태_확인_5개_일치() { - int[] winningNums = {1,2,3,4,5,10}; - assertThat(lotto.getLottoResultStatus(winningNums)).isEqualTo(LottoResultStatus.WINNING_NUM_5); + String winningNums = "1,2,3,4,5,10"; + int bonusNum = 11; + assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_5); + } + + @Test + public void 당첨번호에_따른_상태_확인_5개_일치_보너스번호_일치() { + String winningNums = "1,2,3,4,5,10"; + int bonusNum = 6; + assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_5_BONUS); } @Test public void 당첨번호에_따른_상태_확인_6개_일치() { - int[] winningNums = {1,2,3,4,5,6}; - assertThat(lotto.getLottoResultStatus(winningNums)).isEqualTo(LottoResultStatus.WINNING_NUM_6); + String winningNums = "1,2,3,4,5,6"; + int bonusNum = 45; + assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_6); } } diff --git a/src/test/java/domain/PriceTest.java b/src/test/java/domain/MoneyTest.java similarity index 66% rename from src/test/java/domain/PriceTest.java rename to src/test/java/domain/MoneyTest.java index c79cbc3711c..83cab455e35 100644 --- a/src/test/java/domain/PriceTest.java +++ b/src/test/java/domain/MoneyTest.java @@ -8,25 +8,30 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -public class PriceTest { +public class MoneyTest { private static final int ONE_TICKET_PRICE = 1_000; private static final int TOTAL_AMOUNT = 14_000; private static final BigDecimal TOTAL_WINNING_PRICE = BigDecimal.valueOf(9_000_000); - private Price price; + private Money money; @Before public void setUp() { - price = new Price(TOTAL_AMOUNT); + money = new Money(TOTAL_AMOUNT); + } + + @Test(expected = IllegalArgumentException.class) + public void 티켓값_미만의_금액_입력() { + money = new Money(500); } @Test public void 구매_가능한_ticket_count_구하기() { - assertThat(price.ticketCount()).isEqualTo(TOTAL_AMOUNT/ONE_TICKET_PRICE); + assertThat(money.ticketCount()).isEqualTo(TOTAL_AMOUNT/ONE_TICKET_PRICE); } @Test public void 총_수익률_구하기() { - assertThat(price.totalRateByWinning(TOTAL_WINNING_PRICE)) + assertThat(money.totalRateByWinning(TOTAL_WINNING_PRICE)) .isEqualTo( TOTAL_WINNING_PRICE.divide(BigDecimal.valueOf(TOTAL_AMOUNT), 2, RoundingMode.HALF_UP)); } } diff --git a/src/test/java/domain/NumberTest.java b/src/test/java/domain/NumberTest.java new file mode 100644 index 00000000000..3f37b56a077 --- /dev/null +++ b/src/test/java/domain/NumberTest.java @@ -0,0 +1,26 @@ +package domain; + +import org.junit.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class NumberTest { + + @Test(expected = IllegalArgumentException.class) + public void 로또번호_범위에_포함되지_않는_숫자_입력() { + new Number(0); + new Number(47); + } + + @Test + public void 숫자_일치여부_확인_일치할_때() { + Number number = new Number(6); + assertThat(number.numberCompare(6)).isEqualTo(true); + } + + @Test + public void 숫자_일치여부_확인_불일치할_때() { + Number number = new Number(7); + assertThat(number.numberCompare(6)).isEqualTo(false); + } +} From 89cc8bae5d516f8f666e5cd23084da363ecb6df3 Mon Sep 17 00:00:00 2001 From: yesjehmi Date: Wed, 27 Mar 2019 23:29:51 +0900 Subject: [PATCH 2/5] =?UTF-8?q?1.=20GenerateLotto=20LottoReturn=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD.=202.=20LottoResultStatus,=20des?= =?UTF-8?q?cription=20=EC=B6=94=EA=B0=80.=203.=20Number=20compare=20>=20eq?= =?UTF-8?q?uals=EB=A1=9C=20=EC=88=98=EC=A0=95.=20=09-=20testClass=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95.=204.=20test=20class=EB=AA=85=20setUp=20m?= =?UTF-8?q?ethod=20=EB=AA=85=20=EC=BB=A8=EB=B2=A4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Lotto.java | 6 ++---- src/main/java/domain/LottoGenerator.java | 12 ++++++------ src/main/java/domain/LottoNumbers.java | 5 ++--- src/main/java/domain/LottoResultStatus.java | 17 +++++++++-------- src/main/java/domain/Number.java | 10 ++++++++-- src/test/java/domain/LottoNumbersTest.java | 2 +- src/test/java/domain/NumberTest.java | 4 ++-- 7 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index 1ae2e6f6487..63586d2d7d6 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -1,14 +1,12 @@ package domain; -import java.util.List; - public class Lotto { private static final int BONUS_AVAILABLE_MATCH_COUNT = 5; private LottoNumbers lottoNumbers; - public static Lotto generateLotto(List integers) { + public static Lotto generateLotto(LottoNumbers integers) { Lotto lotto = new Lotto(); - lotto.lottoNumbers = new LottoNumbers(integers); + lotto.lottoNumbers = integers; return lotto; } diff --git a/src/main/java/domain/LottoGenerator.java b/src/main/java/domain/LottoGenerator.java index 61c800addd0..fdc70945b95 100644 --- a/src/main/java/domain/LottoGenerator.java +++ b/src/main/java/domain/LottoGenerator.java @@ -5,7 +5,7 @@ import java.util.List; public class LottoGenerator { - private static final int LOTTO_NUMBER_LENTH = 6; + private static final int LOTTO_RANGE_MIN_NUM = 1; private static final int LOTTO_MAX_NUMBER = 46; private List lottoRangeNumbers; @@ -13,21 +13,21 @@ public LottoGenerator() { lottoRangeNumbers = makeLottoNumberRange(); } - public List generateRandomNumber() { + public LottoNumbers generateRandomNumber() { Collections.shuffle(this.lottoRangeNumbers); List lottoNum = new ArrayList(); - for (int i=0; i < LOTTO_NUMBER_LENTH; i++) { + for (int i = 0; i < LottoNumbers.LOTTO_NUMBER_SIZE; i++) { lottoNum.add(this.lottoRangeNumbers.get(i)); } - return lottoNum; + return new LottoNumbers(lottoNum); } - + // TODO :: https://github.com/next-step/java-lotto/pull/139 private static List makeLottoNumberRange() { List lottoNumberRange = new ArrayList<>(); - int i = 1; + int i = LOTTO_RANGE_MIN_NUM; while(i <= LOTTO_MAX_NUMBER) { lottoNumberRange.add(i); i ++; diff --git a/src/main/java/domain/LottoNumbers.java b/src/main/java/domain/LottoNumbers.java index 67da34cde04..8e463cb2b2a 100644 --- a/src/main/java/domain/LottoNumbers.java +++ b/src/main/java/domain/LottoNumbers.java @@ -4,7 +4,7 @@ import java.util.stream.Collectors; public class LottoNumbers { - private static final int LOTTO_NUMBER_SIZE = 6; + public static final int LOTTO_NUMBER_SIZE = 6; private List numbers; public LottoNumbers(List numbers) { @@ -16,8 +16,7 @@ public LottoNumbers(List numbers) { } public boolean contains(int number) { - return numbers.stream().map(num -> num.numberCompare(number)).collect(Collectors.toList()) - .contains(true); + return numbers.stream().map(num -> num.equals(number)).findFirst().isPresent(); } public String toString() { diff --git a/src/main/java/domain/LottoResultStatus.java b/src/main/java/domain/LottoResultStatus.java index fd5ebc52630..bde01495e39 100644 --- a/src/main/java/domain/LottoResultStatus.java +++ b/src/main/java/domain/LottoResultStatus.java @@ -5,22 +5,24 @@ import java.util.List; public enum LottoResultStatus { - NONE(Arrays.asList(0,1,2), false, 0L), - WINNING_NUM_3(Arrays.asList(3), false, 5_000L), - WINNING_NUM_4(Arrays.asList(4), false, 50_000L), - WINNING_NUM_5(Arrays.asList(5), false, 1_500_000L), - WINNING_NUM_5_BONUS(Arrays.asList(5), true, 1_500_000L), - WINNING_NUM_6(Arrays.asList(6), false, 2_000_000_000L); + NONE(Arrays.asList(0,1,2), false, 0L, ""), + WINNING_NUM_3(Arrays.asList(3), false, 5_000L, "3개 일치"), + WINNING_NUM_4(Arrays.asList(4), false, 50_000L, "4개 일치"), + WINNING_NUM_5(Arrays.asList(5), false, 1_500_000L, "5개 일치"), + WINNING_NUM_5_BONUS(Arrays.asList(5), true, 1_500_000L, "5개 일치, 보너스 볼 일치"), + WINNING_NUM_6(Arrays.asList(6), false, 2_000_000_000L, "6개 일치"); private List matchCounts; private boolean bonusMatchYn; private Long winnersPrice; + private String description; - LottoResultStatus(List matchCount, boolean bonusMatchYn, Long winnersPrice) { + LottoResultStatus(List matchCount, boolean bonusMatchYn, Long winnersPrice, String description) { this.matchCounts = matchCount; this.bonusMatchYn = bonusMatchYn; this.winnersPrice = winnersPrice; + this.description = description; } public static LottoResultStatus findByMatchCount(int matchCount, boolean bonusYn) { @@ -37,5 +39,4 @@ public boolean hasMatchCount(Integer matchCount, boolean bonusYn) { public static BigDecimal getWinnersPriceByStatus(int lottoCount, LottoResultStatus status) { return BigDecimal.valueOf(lottoCount * status.winnersPrice); } - } diff --git a/src/main/java/domain/Number.java b/src/main/java/domain/Number.java index 84875038efa..280bc503a04 100644 --- a/src/main/java/domain/Number.java +++ b/src/main/java/domain/Number.java @@ -1,5 +1,7 @@ package domain; +import java.util.Objects; + public class Number { private Integer number; @@ -15,7 +17,11 @@ public String toString() { return Integer.toString(number); } - public boolean numberCompare(Integer number) { - return this.number == number; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Number)) return false; + Number number1 = (Number) o; + return Objects.equals(number, number1.number); } } diff --git a/src/test/java/domain/LottoNumbersTest.java b/src/test/java/domain/LottoNumbersTest.java index 187bc69e64b..b776484888e 100644 --- a/src/test/java/domain/LottoNumbersTest.java +++ b/src/test/java/domain/LottoNumbersTest.java @@ -12,7 +12,7 @@ public class LottoNumbersTest { private LottoNumbers lottoNumbers; @Before - public void SET_UP() { + public void setUp() { List numbers = Arrays.asList(1,2,3,4,5,6); lottoNumbers = new LottoNumbers(numbers); } diff --git a/src/test/java/domain/NumberTest.java b/src/test/java/domain/NumberTest.java index 3f37b56a077..10fe0040da7 100644 --- a/src/test/java/domain/NumberTest.java +++ b/src/test/java/domain/NumberTest.java @@ -15,12 +15,12 @@ public class NumberTest { @Test public void 숫자_일치여부_확인_일치할_때() { Number number = new Number(6); - assertThat(number.numberCompare(6)).isEqualTo(true); + assertThat(number.equals(6)).isEqualTo(true); } @Test public void 숫자_일치여부_확인_불일치할_때() { Number number = new Number(7); - assertThat(number.numberCompare(6)).isEqualTo(false); + assertThat(number.equals(6)).isEqualTo(false); } } From 234e3988fc1062b4c99c2e88077c9bd363f971e5 Mon Sep 17 00:00:00 2001 From: yesjehmi Date: Thu, 28 Mar 2019 01:12:49 +0900 Subject: [PATCH 3/5] =?UTF-8?q?1.=20lottoStatus=20Enum=EC=97=90=20descript?= =?UTF-8?q?ion=20=EC=88=98=EC=A0=95.=20=09-=20resultView=EC=97=90=20foreac?= =?UTF-8?q?h=EB=A1=9C=20=EC=88=98=EC=A0=95.=202.=20Lotto.GenerateLotto=20>?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=9E=90=EB=A1=9C=20=EB=B3=80=EA=B2=BD.?= =?UTF-8?q?=203.=20LottoGenerator=20>=20LottoNumberGenerator=20=09-=20meth?= =?UTF-8?q?od=20=EC=93=B0=EC=9E=84=EC=83=88=EC=97=90=20=EB=A7=9E=EA=B2=8C?= =?UTF-8?q?=20class=20=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Lotto.java | 6 ++-- src/main/java/domain/LottoGame.java | 5 ++-- ...nerator.java => LottoNumberGenerator.java} | 6 ++-- src/main/java/domain/LottoNumbers.java | 2 +- src/main/java/domain/LottoResultStatus.java | 5 ++++ src/main/java/view/ResultView.java | 17 ++++++----- src/test/java/domain/LottoGeneratorTest.java | 28 ------------------- .../java/domain/LottoNumberGeneratorTest.java | 14 ++++++++++ src/test/java/domain/LottoResultTest.java | 7 +++-- src/test/java/domain/LottoTest.java | 3 +- 10 files changed, 41 insertions(+), 52 deletions(-) rename src/main/java/domain/{LottoGenerator.java => LottoNumberGenerator.java} (88%) delete mode 100644 src/test/java/domain/LottoGeneratorTest.java create mode 100644 src/test/java/domain/LottoNumberGeneratorTest.java diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index 63586d2d7d6..633b4dda2c2 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -4,10 +4,8 @@ public class Lotto { private static final int BONUS_AVAILABLE_MATCH_COUNT = 5; private LottoNumbers lottoNumbers; - public static Lotto generateLotto(LottoNumbers integers) { - Lotto lotto = new Lotto(); - lotto.lottoNumbers = integers; - return lotto; + public Lotto (LottoNumbers integers) { + this.lottoNumbers = integers; } public LottoResultStatus getLottoResultStatus(WinningLotto winningLotto) { diff --git a/src/main/java/domain/LottoGame.java b/src/main/java/domain/LottoGame.java index e92e2e60dca..8f255394e87 100644 --- a/src/main/java/domain/LottoGame.java +++ b/src/main/java/domain/LottoGame.java @@ -1,7 +1,6 @@ package domain; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class LottoGame { @@ -9,12 +8,12 @@ public class LottoGame { private List lottos; public LottoGame(int lottoCount) { - LottoGenerator generator = new LottoGenerator(); + LottoNumberGenerator generator = new LottoNumberGenerator(); this.lottos = new ArrayList<>(); int i=0; while (i < lottoCount) { - Lotto lotto = Lotto.generateLotto(generator.generateRandomNumber()); + Lotto lotto = new Lotto(generator.generateRandomNumber()); lottos.add(lotto); i ++; } diff --git a/src/main/java/domain/LottoGenerator.java b/src/main/java/domain/LottoNumberGenerator.java similarity index 88% rename from src/main/java/domain/LottoGenerator.java rename to src/main/java/domain/LottoNumberGenerator.java index fdc70945b95..1d2ac4260d8 100644 --- a/src/main/java/domain/LottoGenerator.java +++ b/src/main/java/domain/LottoNumberGenerator.java @@ -4,12 +4,12 @@ import java.util.Collections; import java.util.List; -public class LottoGenerator { +public class LottoNumberGenerator { private static final int LOTTO_RANGE_MIN_NUM = 1; private static final int LOTTO_MAX_NUMBER = 46; private List lottoRangeNumbers; - public LottoGenerator() { + public LottoNumberGenerator() { lottoRangeNumbers = makeLottoNumberRange(); } @@ -23,7 +23,7 @@ public LottoNumbers generateRandomNumber() { return new LottoNumbers(lottoNum); } - // TODO :: https://github.com/next-step/java-lotto/pull/139 + private static List makeLottoNumberRange() { List lottoNumberRange = new ArrayList<>(); diff --git a/src/main/java/domain/LottoNumbers.java b/src/main/java/domain/LottoNumbers.java index 8e463cb2b2a..cdf87275d63 100644 --- a/src/main/java/domain/LottoNumbers.java +++ b/src/main/java/domain/LottoNumbers.java @@ -16,7 +16,7 @@ public LottoNumbers(List numbers) { } public boolean contains(int number) { - return numbers.stream().map(num -> num.equals(number)).findFirst().isPresent(); + return numbers.stream().map(num -> num.equals(new Number(number))).anyMatch(num -> num.equals(true)); } public String toString() { diff --git a/src/main/java/domain/LottoResultStatus.java b/src/main/java/domain/LottoResultStatus.java index bde01495e39..c4e6df4f5f6 100644 --- a/src/main/java/domain/LottoResultStatus.java +++ b/src/main/java/domain/LottoResultStatus.java @@ -39,4 +39,9 @@ public boolean hasMatchCount(Integer matchCount, boolean bonusYn) { public static BigDecimal getWinnersPriceByStatus(int lottoCount, LottoResultStatus status) { return BigDecimal.valueOf(lottoCount * status.winnersPrice); } + + public String findDescription() { + return this.description; + } + } diff --git a/src/main/java/view/ResultView.java b/src/main/java/view/ResultView.java index 0ceb0384edb..b1b7fee6a96 100644 --- a/src/main/java/view/ResultView.java +++ b/src/main/java/view/ResultView.java @@ -1,9 +1,8 @@ package view; -import domain.LottoGame; -import domain.LottoResult; -import domain.LottoResultStatus; -import domain.Money; +import domain.*; + +import java.util.Arrays; public class ResultView { public static void printLottos(LottoGame result) { @@ -15,11 +14,11 @@ public static void printLottos(LottoGame result) { public static void printLottoResult(LottoResult lottoResult, Money money) { System.out.println("당첨 통계"); System.out.println("---------"); - System.out.println("3개 일치 (5,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_3)+ "개"); - System.out.println("4개 일치 (50,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_4)+ "개"); - System.out.println("5개 일치 (1,500,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_5)+ "개"); - System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_5_BONUS)+ "개"); - System.out.println("6개 일치 (2,000,000,000원)- " +lottoResult.getLottoResult(LottoResultStatus.WINNING_NUM_6)+ "개"); + + Arrays.stream(LottoResultStatus.values()).filter(status-> !status.equals(LottoResultStatus.NONE)).forEach(resultStatus -> { + System.out.println(resultStatus.findDescription() + " - " + lottoResult.getLottoResult(resultStatus)+" 개"); + }); + System.out.println(); System.out.println("총 수익률은 "+lottoResult.calculateBenefit(money)+ "입니다. "); } diff --git a/src/test/java/domain/LottoGeneratorTest.java b/src/test/java/domain/LottoGeneratorTest.java deleted file mode 100644 index 74e7661c3c8..00000000000 --- a/src/test/java/domain/LottoGeneratorTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package domain; - -import org.junit.Before; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; - -public class LottoGeneratorTest { - private final static int LOTTO_MAX_NUMBER = 46; - private LottoGenerator lottoGenerator; - - @Before - public void setUp() { - lottoGenerator = new LottoGenerator(); - } - - @Test - public void 생성된_랜덤숫자중_46을_초과하는_값이_있는지() { - List randomNumbers = lottoGenerator.generateRandomNumber(); - Collections.sort(randomNumbers); - int maximumNumber = randomNumbers.get(randomNumbers.size()-1); - assertThat(maximumNumber).isLessThanOrEqualTo(LOTTO_MAX_NUMBER); - } -} diff --git a/src/test/java/domain/LottoNumberGeneratorTest.java b/src/test/java/domain/LottoNumberGeneratorTest.java new file mode 100644 index 00000000000..6f8f89710ae --- /dev/null +++ b/src/test/java/domain/LottoNumberGeneratorTest.java @@ -0,0 +1,14 @@ +package domain; + +import org.junit.Before; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class LottoNumberGeneratorTest { + private LottoNumberGenerator lottoNumberGenerator; + + @Before + public void setUp() { + lottoNumberGenerator = new LottoNumberGenerator(); + } +} diff --git a/src/test/java/domain/LottoResultTest.java b/src/test/java/domain/LottoResultTest.java index 804fb7a03df..b7bb45a8e4a 100644 --- a/src/test/java/domain/LottoResultTest.java +++ b/src/test/java/domain/LottoResultTest.java @@ -26,9 +26,10 @@ public void setUp() { List lottoNumbers2= Arrays.asList(9,10,11,12,13,14); List lottoNumbers3= Arrays.asList(9,10,11,12,13,14); - List lottos = Arrays.asList(Lotto.generateLotto(lottoNumbers) - , Lotto.generateLotto(lottoNumbers2) - , Lotto.generateLotto(lottoNumbers3)); + LottoNumbers numbers1 = new LottoNumbers(lottoNumbers); + LottoNumbers numbers2 = new LottoNumbers(lottoNumbers2); + LottoNumbers numbers3 = new LottoNumbers(lottoNumbers3); + List lottos = Arrays.asList(new Lotto(numbers1), new Lotto(numbers2), new Lotto(numbers3)); lottoResult = new LottoResult(lottos, new WinningLotto(INPUT_WINNING_NUMBERS, INPUT_BONUs_NUMBER)); } diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/domain/LottoTest.java index 2334ae5d7c0..0f4b0a5960e 100644 --- a/src/test/java/domain/LottoTest.java +++ b/src/test/java/domain/LottoTest.java @@ -19,7 +19,8 @@ public void setUp() { for (int i=1 ; i<=6; i++) { nums.add(i); } - lotto = Lotto.generateLotto(nums); + LottoNumbers numbers = new LottoNumbers(nums); + lotto = new Lotto(numbers); } @Test From 04ac72383ffceed4fe19360761ac5ca599214a06 Mon Sep 17 00:00:00 2001 From: yesjehmi Date: Thu, 28 Mar 2019 01:14:27 +0900 Subject: [PATCH 4/5] =?UTF-8?q?test=20class=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/NumberTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/domain/NumberTest.java b/src/test/java/domain/NumberTest.java index 10fe0040da7..e1834e422ba 100644 --- a/src/test/java/domain/NumberTest.java +++ b/src/test/java/domain/NumberTest.java @@ -15,12 +15,12 @@ public class NumberTest { @Test public void 숫자_일치여부_확인_일치할_때() { Number number = new Number(6); - assertThat(number.equals(6)).isEqualTo(true); + assertThat(number.equals(new Number(6))).isEqualTo(true); } @Test public void 숫자_일치여부_확인_불일치할_때() { Number number = new Number(7); - assertThat(number.equals(6)).isEqualTo(false); + assertThat(number.equals(new Number(6))).isEqualTo(false); } } From 10bd17e51b370920d545910af773282e1aea02e4 Mon Sep 17 00:00:00 2001 From: "Seoyeong Kim (Summer)" <33566569+Seoyeong-Kim@users.noreply.github.com> Date: Fri, 29 Mar 2019 03:16:59 +0900 Subject: [PATCH 5/5] =?UTF-8?q?1.=20Lotto,=20WinningLotto=20=20>=20Lotto?= =?UTF-8?q?=20class=20=EA=B0=84=EC=86=8C=ED=99=94=20=EB=B0=8F=20winning=20?= =?UTF-8?q?number=20=EB=A7=A4=EC=B9=AD=EB=93=B1=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=EB=8A=94=20winningLotto=EB=A1=9C=20=EC=9C=84?= =?UTF-8?q?=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2. LottoNumberGenerator, LottoNumbers > 생성자로 방식에서 정적 팩토리 메소드로 instance 생성하도록 수정. 3. LottoResult > winnint number 매칭, 주체 변경에 따른 소스 수정 4. Number : 내부에서 사용되는 수 (로또 최소값, 최대값) 상수화 5. InputView에서 String > String[]로 값 return 해 주도록 수정. > 개인적으로 winningNumber의 타입 컨버팅, 유효성 체크 등은 비즈니스 내부 로직이라고 생각하여서 inputView에서는 최소한으로 split만을 한 채 값을 전달하도록 구현하였습니다. 4. TestClass 수정 --- src/main/java/domain/Lotto.java | 23 +------ .../java/domain/LottoNumberGenerator.java | 2 +- src/main/java/domain/LottoNumbers.java | 19 ++++-- src/main/java/domain/LottoResult.java | 7 +- src/main/java/domain/Number.java | 10 ++- src/main/java/domain/WinningLotto.java | 43 ++++++++---- src/main/java/view/InputView.java | 4 +- src/test/java/domain/LottoGameTest.java | 7 +- .../java/domain/LottoNumberGeneratorTest.java | 7 ++ src/test/java/domain/LottoNumbersTest.java | 6 +- src/test/java/domain/LottoResultTest.java | 8 +-- src/test/java/domain/LottoTest.java | 48 +------------- src/test/java/domain/NumberTest.java | 12 ++-- src/test/java/domain/WinningLottoTest.java | 65 +++++++++++++++++++ 14 files changed, 150 insertions(+), 111 deletions(-) create mode 100644 src/test/java/domain/WinningLottoTest.java diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index 633b4dda2c2..36f535bed22 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -1,30 +1,13 @@ package domain; public class Lotto { - private static final int BONUS_AVAILABLE_MATCH_COUNT = 5; private LottoNumbers lottoNumbers; - public Lotto (LottoNumbers integers) { - this.lottoNumbers = integers; - } - - public LottoResultStatus getLottoResultStatus(WinningLotto winningLotto) { - int containsWinningNumberCount = 0; - boolean bonusYn = false; - for (int number : winningLotto.getWinningNumber()) { - if(lottoNumbers.contains(number)) - containsWinningNumberCount ++; - } - - if( containsWinningNumberCount == BONUS_AVAILABLE_MATCH_COUNT && lottoNumbers.contains(winningLotto.getBonusNumber())) { - bonusYn = true; - } - - return LottoResultStatus.findByMatchCount(containsWinningNumberCount, bonusYn); + public Lotto (LottoNumbers numbers) { + this.lottoNumbers = numbers; } public LottoNumbers getLottoNumbers() { - return this.lottoNumbers; + return this.lottoNumbers; } - } diff --git a/src/main/java/domain/LottoNumberGenerator.java b/src/main/java/domain/LottoNumberGenerator.java index 1d2ac4260d8..524489071cc 100644 --- a/src/main/java/domain/LottoNumberGenerator.java +++ b/src/main/java/domain/LottoNumberGenerator.java @@ -21,7 +21,7 @@ public LottoNumbers generateRandomNumber() { lottoNum.add(this.lottoRangeNumbers.get(i)); } - return new LottoNumbers(lottoNum); + return LottoNumbers.createInstance(lottoNum); } private static List makeLottoNumberRange() { diff --git a/src/main/java/domain/LottoNumbers.java b/src/main/java/domain/LottoNumbers.java index cdf87275d63..8145c9a432a 100644 --- a/src/main/java/domain/LottoNumbers.java +++ b/src/main/java/domain/LottoNumbers.java @@ -7,16 +7,21 @@ public class LottoNumbers { public static final int LOTTO_NUMBER_SIZE = 6; private List numbers; - public LottoNumbers(List numbers) { - if (numbers.size() != LOTTO_NUMBER_SIZE) { + private LottoNumbers(List inputNumbers) { + List list = inputNumbers.stream().map(Number::createInstance).collect(Collectors.toList()); + this.numbers = list; + } + + public static LottoNumbers createInstance(List inputNumbers) { + if (inputNumbers.size() != LOTTO_NUMBER_SIZE) { throw new IllegalArgumentException(); } - this.numbers = numbers.stream().map(Number::new).collect(Collectors.toList()); + return new LottoNumbers(inputNumbers); } - public boolean contains(int number) { - return numbers.stream().map(num -> num.equals(new Number(number))).anyMatch(num -> num.equals(true)); + public boolean contains(Number number) { + return numbers.stream().map(num -> num.equals(number)).anyMatch(num -> num.equals(true)); } public String toString() { @@ -26,4 +31,8 @@ public String toString() { resultString.append("]"); return resultString.toString(); } + + public List getNumbers() { + return numbers; + } } diff --git a/src/main/java/domain/LottoResult.java b/src/main/java/domain/LottoResult.java index 3ed2122c008..d1b28551356 100644 --- a/src/main/java/domain/LottoResult.java +++ b/src/main/java/domain/LottoResult.java @@ -13,9 +13,10 @@ public LottoResult(List lottos, WinningLotto winningNumbers) { this.lottos = lottos; this.lottoResults = new HashMap<>(); initMap(); - lottos.stream() - .map(lotto -> lotto.getLottoResultStatus(winningNumbers)) - .forEach(this::updateLottoResult); + + for (Lotto lotto : lottos) { + updateLottoResult(winningNumbers.result(lotto)); + } } public List getLottos(){ diff --git a/src/main/java/domain/Number.java b/src/main/java/domain/Number.java index 280bc503a04..8e18f470ad4 100644 --- a/src/main/java/domain/Number.java +++ b/src/main/java/domain/Number.java @@ -3,15 +3,21 @@ import java.util.Objects; public class Number { + private static final int MININUM_NUMBER = 1; + private static final int MAXIMUM_NUMBER = 46; private Integer number; - public Number(Integer number) { - if (number < 1 || number > 46) { + private Number(Integer number) { + if (number < MININUM_NUMBER || number > MAXIMUM_NUMBER) { throw new IllegalArgumentException(); } this.number = number; } + public static Number createInstance(Integer integerNumber) { + return new Number(integerNumber); + } + @Override public String toString() { return Integer.toString(number); diff --git a/src/main/java/domain/WinningLotto.java b/src/main/java/domain/WinningLotto.java index 478317e8d2e..ea48a903add 100644 --- a/src/main/java/domain/WinningLotto.java +++ b/src/main/java/domain/WinningLotto.java @@ -1,26 +1,41 @@ package domain; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; public class WinningLotto { - private int[] winningNumber; - private int bonusNumber; + private static final int BONUS_AVAILABLE_MATCH_COUNT = 5; - public WinningLotto(String inputWinnigNumber, int bonusNumber) { - this.winningNumber = convertToInt(inputWinnigNumber); - this.bonusNumber = bonusNumber; - } + private LottoNumbers winningNumber; + private Number bonusNumber; - private int[] convertToInt(String inputWinningNumber) { - String[] stringWinningNumbers = inputWinningNumber.replace(" ","").split(","); - return Arrays.stream(stringWinningNumbers).mapToInt(str-> Integer.parseInt(str)).toArray(); + public WinningLotto(String[] inputWinnigNumber, int bonusNumber) { + this.winningNumber = convertToLottoNumbers(inputWinnigNumber); + this.bonusNumber = Number.createInstance(bonusNumber); } - public int[] getWinningNumber() { - return winningNumber; + private LottoNumbers convertToLottoNumbers(String[] inputWinningNumber) { + List numbers = new ArrayList<>(); + for (String str: inputWinningNumber) { + numbers.add(Integer.parseInt(str)); + } + + return LottoNumbers.createInstance(numbers); } - public int getBonusNumber() { - return bonusNumber; + public LottoResultStatus result(Lotto lotto) { //1,2,3,4,5 + int countainsWinningNumberCount = 0; + + for( Number number : winningNumber.getNumbers()) { + if(lotto.getLottoNumbers().contains(number)) { + countainsWinningNumberCount++; + } + } + + if (countainsWinningNumberCount == BONUS_AVAILABLE_MATCH_COUNT && lotto.getLottoNumbers().contains(bonusNumber)) { + return LottoResultStatus.findByMatchCount(countainsWinningNumberCount, true); + } + + return LottoResultStatus.findByMatchCount(countainsWinningNumberCount, false); } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index df993808e15..da82dc9d488 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -11,11 +11,11 @@ public static int getAmount() { return inputAmount; } - public static String getWinningNumbers() { + public static String[] getWinningNumbers() { System.out.println("지난 주 당첨 번호를 입력해 주세요."); Scanner scanner = new Scanner(System.in); String winningNumbers = scanner.nextLine(); - return winningNumbers; + return winningNumbers.replace(" ","").split(","); } public static int getBonusNumber() { diff --git a/src/test/java/domain/LottoGameTest.java b/src/test/java/domain/LottoGameTest.java index 85aca7e32d4..0dd805afa7b 100644 --- a/src/test/java/domain/LottoGameTest.java +++ b/src/test/java/domain/LottoGameTest.java @@ -9,7 +9,8 @@ public class LottoGameTest { private static final int AMOUNT = 14_000; private static final int PRICE = 1_000; private static final int LOTTO_COUNT = AMOUNT / PRICE; - public static final String WINNING_NUMBERS = "1, 2, 3, 4, 5, 6"; + private static final String[] WINNING_NUMBERS = new String[]{"1","2","3","4","5","6"}; + private static final int BONUS_NUMBER = 7; private LottoGame lottoGame; private Money money; @@ -21,8 +22,6 @@ public void setUp() { @Test public void 금액에_맞는_LOTTO_갯수가_생성_되었는가() { - String winningNumbers = LottoGameTest.WINNING_NUMBERS; - int bonusNumber = 7; - assertThat(lottoGame.playingLotto(new WinningLotto(winningNumbers, bonusNumber)).getLottos().size()).isEqualTo(LOTTO_COUNT); + assertThat(lottoGame.playingLotto(new WinningLotto(LottoGameTest.WINNING_NUMBERS, BONUS_NUMBER)).getLottos().size()).isEqualTo(LOTTO_COUNT); } } diff --git a/src/test/java/domain/LottoNumberGeneratorTest.java b/src/test/java/domain/LottoNumberGeneratorTest.java index 6f8f89710ae..d9bcdeaf27f 100644 --- a/src/test/java/domain/LottoNumberGeneratorTest.java +++ b/src/test/java/domain/LottoNumberGeneratorTest.java @@ -1,14 +1,21 @@ package domain; import org.junit.Before; +import org.junit.Test; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class LottoNumberGeneratorTest { + private static final int LOTTO_NUMBER_SIZE = 6; private LottoNumberGenerator lottoNumberGenerator; @Before public void setUp() { lottoNumberGenerator = new LottoNumberGenerator(); } + + @Test + public void LOTTO_숫자_갯수_확인() { + assertThat(lottoNumberGenerator.generateRandomNumber().getNumbers().size()).isEqualTo(LOTTO_NUMBER_SIZE); + } } diff --git a/src/test/java/domain/LottoNumbersTest.java b/src/test/java/domain/LottoNumbersTest.java index b776484888e..1e3dae3cb7f 100644 --- a/src/test/java/domain/LottoNumbersTest.java +++ b/src/test/java/domain/LottoNumbersTest.java @@ -14,16 +14,16 @@ public class LottoNumbersTest { @Before public void setUp() { List numbers = Arrays.asList(1,2,3,4,5,6); - lottoNumbers = new LottoNumbers(numbers); + lottoNumbers = LottoNumbers.createInstance(numbers); } @Test public void 로또번호에_winning번호_포함되어있음() { - assertThat(lottoNumbers.contains(1)).isEqualTo(true); + assertThat(lottoNumbers.contains(Number.createInstance(1))).isEqualTo(true); } @Test public void 로또번호에_winning번호_미포함되어있음() { - assertThat(lottoNumbers.contains(10)).isEqualTo(false); + assertThat(lottoNumbers.contains(Number.createInstance(10))).isEqualTo(false); } } diff --git a/src/test/java/domain/LottoResultTest.java b/src/test/java/domain/LottoResultTest.java index b7bb45a8e4a..e4e9d4c5833 100644 --- a/src/test/java/domain/LottoResultTest.java +++ b/src/test/java/domain/LottoResultTest.java @@ -12,7 +12,7 @@ public class LottoResultTest { private static final int TOTAL_AMOUNT = 1_000; - private static final String INPUT_WINNING_NUMBERS = "1,3,5,6,7,8"; + private static final String[] INPUT_WINNING_NUMBERS = new String[]{"1","3","5","6","7","8"}; private static final int INPUT_BONUs_NUMBER = 9; private LottoResult lottoResult; private Money money; @@ -26,9 +26,9 @@ public void setUp() { List lottoNumbers2= Arrays.asList(9,10,11,12,13,14); List lottoNumbers3= Arrays.asList(9,10,11,12,13,14); - LottoNumbers numbers1 = new LottoNumbers(lottoNumbers); - LottoNumbers numbers2 = new LottoNumbers(lottoNumbers2); - LottoNumbers numbers3 = new LottoNumbers(lottoNumbers3); + LottoNumbers numbers1 = LottoNumbers.createInstance(lottoNumbers); + LottoNumbers numbers2 = LottoNumbers.createInstance(lottoNumbers2); + LottoNumbers numbers3 = LottoNumbers.createInstance(lottoNumbers3); List lottos = Arrays.asList(new Lotto(numbers1), new Lotto(numbers2), new Lotto(numbers3)); lottoResult = new LottoResult(lottos, new WinningLotto(INPUT_WINNING_NUMBERS, INPUT_BONUs_NUMBER)); diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/domain/LottoTest.java index 0f4b0a5960e..67daf8cc41d 100644 --- a/src/test/java/domain/LottoTest.java +++ b/src/test/java/domain/LottoTest.java @@ -1,14 +1,10 @@ package domain; import org.junit.Before; -import org.junit.Test; import java.util.ArrayList; import java.util.List; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.fail; - public class LottoTest { private Lotto lotto; @@ -19,50 +15,8 @@ public void setUp() { for (int i=1 ; i<=6; i++) { nums.add(i); } - LottoNumbers numbers = new LottoNumbers(nums); + LottoNumbers numbers = LottoNumbers.createInstance(nums); lotto = new Lotto(numbers); } - @Test - public void 당첨번호에_따른_상태_확인_당첨X() { - String winningNums = "1,2,7,8,9,10"; - int bonusNum = 45; - - assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.NONE); - } - - @Test - public void 당첨번호에_따른_상태_확인_3개_일치() { - String winningNums = "1,2,3,8,9,10"; - int bonusNum = 45; - assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_3); - } - - @Test - public void 당첨번호에_따른_상태_확인_4개_일치() { - String winningNums = "1,2,3,4,9,10"; - int bonusNum = 45; - assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_4); - } - - @Test - public void 당첨번호에_따른_상태_확인_5개_일치() { - String winningNums = "1,2,3,4,5,10"; - int bonusNum = 11; - assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_5); - } - - @Test - public void 당첨번호에_따른_상태_확인_5개_일치_보너스번호_일치() { - String winningNums = "1,2,3,4,5,10"; - int bonusNum = 6; - assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_5_BONUS); - } - - @Test - public void 당첨번호에_따른_상태_확인_6개_일치() { - String winningNums = "1,2,3,4,5,6"; - int bonusNum = 45; - assertThat(lotto.getLottoResultStatus(new WinningLotto(winningNums, bonusNum))).isEqualTo(LottoResultStatus.WINNING_NUM_6); - } } diff --git a/src/test/java/domain/NumberTest.java b/src/test/java/domain/NumberTest.java index e1834e422ba..b27414b2948 100644 --- a/src/test/java/domain/NumberTest.java +++ b/src/test/java/domain/NumberTest.java @@ -8,19 +8,19 @@ public class NumberTest { @Test(expected = IllegalArgumentException.class) public void 로또번호_범위에_포함되지_않는_숫자_입력() { - new Number(0); - new Number(47); + Number.createInstance(0); + Number.createInstance(47); } @Test public void 숫자_일치여부_확인_일치할_때() { - Number number = new Number(6); - assertThat(number.equals(new Number(6))).isEqualTo(true); + Number number = Number.createInstance(6); + assertThat(number.equals(Number.createInstance(6))).isEqualTo(true); } @Test public void 숫자_일치여부_확인_불일치할_때() { - Number number = new Number(7); - assertThat(number.equals(new Number(6))).isEqualTo(false); + Number number = Number.createInstance(7); + assertThat(number.equals(Number.createInstance(6))).isEqualTo(false); } } diff --git a/src/test/java/domain/WinningLottoTest.java b/src/test/java/domain/WinningLottoTest.java new file mode 100644 index 00000000000..d6fee14c1de --- /dev/null +++ b/src/test/java/domain/WinningLottoTest.java @@ -0,0 +1,65 @@ +package domain; + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class WinningLottoTest { + private static final String[] WINNING_NUMBERS = new String[]{"1","2","3","4","5","6"}; + private static final int BONUS_NUMBER = 7; + private WinningLotto winningLotto; + + @Before + public void SET_UP() { + winningLotto = new WinningLotto(WINNING_NUMBERS, BONUS_NUMBER); + } + + public Lotto makeLottoInstance(List inputNumbers) { + List numbers = new ArrayList<>(); + for( int number : inputNumbers) { + numbers.add(Number.createInstance(number)); + } + + return new Lotto(LottoNumbers.createInstance(inputNumbers)); + } + @Test + public void 당첨번호에_따른_상태_확인_당첨X() { + List inputNumbers = Arrays.asList(1,7,8,9,10,11); + assertThat(winningLotto.result(makeLottoInstance(inputNumbers))).isEqualTo(LottoResultStatus.NONE); + } + + @Test + public void 당첨번호에_따른_상태_확인_3개_일치() { + List inputNumbers = Arrays.asList(1,2,3,9,10,11); + assertThat(winningLotto.result(makeLottoInstance(inputNumbers))).isEqualTo(LottoResultStatus.WINNING_NUM_3); + } + + @Test + public void 당첨번호에_따른_상태_확인_4개_일치() { + List inputNumbers = Arrays.asList(1,2,3,4,10,11); + assertThat(winningLotto.result(makeLottoInstance(inputNumbers))).isEqualTo(LottoResultStatus.WINNING_NUM_4); + } + + @Test + public void 당첨번호에_따른_상태_확인_5개_일치() { + List inputNumbers = Arrays.asList(1,2,3,4,5,11); + assertThat(winningLotto.result(makeLottoInstance(inputNumbers))).isEqualTo(LottoResultStatus.WINNING_NUM_5); + } + + @Test + public void 당첨번호에_따른_상태_확인_5개_일치_보너스번호_일치() { + List inputNumbers = Arrays.asList(1,2,3,4,5,7); + assertThat(winningLotto.result(makeLottoInstance(inputNumbers))).isEqualTo(LottoResultStatus.WINNING_NUM_5_BONUS); + } + + @Test + public void 당첨번호에_따른_상태_확인_6개_일치() { + List inputNumbers = Arrays.asList(1,2,3,4,5,6); + assertThat(winningLotto.result(makeLottoInstance(inputNumbers))).isEqualTo(LottoResultStatus.WINNING_NUM_6); + } +}