diff --git a/build.gradle b/build.gradle index 079c9a02..6ecd2248 100644 --- a/build.gradle +++ b/build.gradle @@ -15,4 +15,4 @@ dependencies { test { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/src/main/java/controller/LottoController.java b/src/main/java/com/study/controller/LottoController.java similarity index 56% rename from src/main/java/controller/LottoController.java rename to src/main/java/com/study/controller/LottoController.java index 37082b72..c1d5b939 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/com/study/controller/LottoController.java @@ -1,10 +1,10 @@ -package controller; +package com.study.controller; -import domain.Lotto; -import domain.LottoMachine; -import enums.Rank; -import view.InputView; -import view.OutputView; +import com.study.domain.LottoMachine; +import com.study.domain.Lottos; +import com.study.enums.Rank; +import com.study.view.InputView; +import com.study.view.OutputView; import java.util.List; import java.util.Map; @@ -16,14 +16,16 @@ public class LottoController { public static void main(String[] args) { - LottoMachine lottoMachine = new LottoMachine(inputView.inputMoney()); - List lottoTickets = lottoMachine.getLottoTickets(); - outputView.printLottoTickets(lottoTickets); + LottoMachine lottoMachine = new LottoMachine(inputView.inputMoney(), inputView.manualTicketCount()); + List> manulLottoNumbers = inputView.manualLottlNumbers(lottoMachine.getLottoManualTicketCount()); + + Lottos lottos = new Lottos(lottoMachine.getLottoTotalTickets(manulLottoNumbers)); + outputView.printLottoTickets(lottos); List winningNumbers = lottoMachine.getWinningNumber(inputView.inputWinningNumbers()); int bonusNumber = lottoMachine.getBonusBall(inputView.inputBonusBall(), winningNumbers); - Map rankResult = lottoMachine.getRankResult(lottoTickets, winningNumbers, bonusNumber); + Map rankResult = lottoMachine.getRankResult(lottos, winningNumbers, bonusNumber); outputView.printRankResult(rankResult); outputView.printStatistics(lottoMachine.getProfitRate(rankResult)); } diff --git a/src/main/java/domain/Lotto.java b/src/main/java/com/study/domain/Lotto.java similarity index 79% rename from src/main/java/domain/Lotto.java rename to src/main/java/com/study/domain/Lotto.java index 8b76c4f4..17f88c6b 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/com/study/domain/Lotto.java @@ -1,14 +1,16 @@ -package domain; +package com.study.domain; -import enums.Rank; +import com.study.enums.Rank; import java.util.List; public class Lotto { private final List lottoNumbers; + private final LottoValication lottoValication = new LottoValication(); public Lotto(List randomNumber) { + lottoValication.lottoNumberValidate(randomNumber); this.lottoNumbers = randomNumber; } @@ -17,8 +19,6 @@ public List getLottoNumbers() { } public Rank getRank(List winningNumber, int bonusNumber) { - countOfMatches(winningNumber); - countOfBonusMatch(bonusNumber); return Rank.getRank(countOfMatches(winningNumber), countOfBonusMatch(bonusNumber)); } diff --git a/src/main/java/com/study/domain/LottoMachine.java b/src/main/java/com/study/domain/LottoMachine.java new file mode 100644 index 00000000..aac3b2e3 --- /dev/null +++ b/src/main/java/com/study/domain/LottoMachine.java @@ -0,0 +1,105 @@ +package com.study.domain; + +import com.study.enums.Rank; +import com.study.enums.RankMap; +import com.study.utils.InputValidation; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class LottoMachine { + + private final int lottoTotalTicketCount; + private final int lottoAutoTicketCount; + private final int lottoManualTicketCount; + private final int money; + private static InputValidation inputValidation = new InputValidation(); + private final static LottoValication LOTTO_VALIDATION = new LottoValication(); + + public LottoMachine(String inputMoney) { + this.money = LOTTO_VALIDATION.checkGivenMoney(inputMoney); + this.lottoTotalTicketCount = this.money / LOTTO_VALIDATION.LOTTO_PRICE; + lottoManualTicketCount = lottoTotalTicketCount; + lottoAutoTicketCount = 0; + } + + public LottoMachine(String inputMoney, int manualTicketCount) { + this.money = LOTTO_VALIDATION.checkGivenMoney(inputMoney); + LOTTO_VALIDATION.canbyAllTickets(money, manualTicketCount); + this.lottoTotalTicketCount = this.money / LOTTO_VALIDATION.LOTTO_PRICE; + this.lottoManualTicketCount = manualTicketCount; + this.lottoAutoTicketCount = lottoTotalTicketCount - lottoManualTicketCount; + } + + public int getLottoTicketCount() { + return this.lottoTotalTicketCount; + } + + public int getLottoManualTicketCount() { + return lottoManualTicketCount; + } + + public List createRandomNumber() { + List balls = IntStream.range(1, 45) + .boxed() + .collect(Collectors.toList()); + Collections.shuffle(balls); + List lottoNumbers = balls.subList(0, 6); + Collections.sort(lottoNumbers); + return lottoNumbers; + } + + public List getLottoTotalTickets(List> manualLottos) { + List lottoTickets = new ArrayList<>(); + lottoTickets.addAll(getLottoManulTickets(manualLottos)); + lottoTickets.addAll(getAutoLottoTickets()); + return lottoTickets; + } + + public List getAutoLottoTickets() { + List lottoTicket = new ArrayList<>(); + for (int i = 0; i < lottoAutoTicketCount; i++) { + lottoTicket.add(new Lotto(createRandomNumber())); + } + return lottoTicket; + } + + public List getLottoManulTickets(List> manualLottos) { + List lottoTicket = new ArrayList<>(); + for (int i = 0; i < lottoManualTicketCount; i++) { + lottoTicket.add(new Lotto(manualLottos.get(i))); + } + return lottoTicket; + } + + public int getBonusBall(String bonusInput, List winningNumber) { + int bonusInputNumber = Integer.parseInt(bonusInput); + LOTTO_VALIDATION.checkBound(bonusInputNumber); + LOTTO_VALIDATION.checkBonusDuplicate(bonusInputNumber, winningNumber); + return bonusInputNumber; + } + + public RankMap getRankResult(Lottos lottos, List winningNumber, int bonusNumber) { + RankMap rankMap = new RankMap(Rank.class); + for (Lotto lotto : lottos.getLottos()) { + rankMap.put(lotto.getRank(winningNumber, bonusNumber), rankMap.get(lotto.getRank(winningNumber, bonusNumber)) + 1); + } + return rankMap; + } + + public double getProfitRate(Map rankResult) { + double totalPrize = rankResult.entrySet() + .stream() + .mapToDouble(rank -> rank.getKey().prize() * rank.getValue()) + .sum(); + return totalPrize / this.money; + } + + public List getWinningNumber(String winningNumber) { + List winningNumbers = inputValidation.toIntegers(inputValidation.splitByComma(winningNumber)); + LOTTO_VALIDATION.lottoNumberValidate(winningNumbers); + return winningNumbers; + } + +} diff --git a/src/main/java/com/study/domain/LottoValication.java b/src/main/java/com/study/domain/LottoValication.java new file mode 100644 index 00000000..117acd8d --- /dev/null +++ b/src/main/java/com/study/domain/LottoValication.java @@ -0,0 +1,75 @@ +package com.study.domain; + +import java.util.List; +import java.util.regex.Pattern; + +public class LottoValication { + + public static final int LOTTO_PRICE = 1000; + public static final int BOUND_MIN = 1; + public static final int BOUND_MAX = 45; + public static final int LOTTO_LENGTH = 6; + + private static final String LOTTO_PRICE_PATTERN = "\\d*000"; + private static final String ALERT_CHECK_BOUND = String.format("당첨번호는 %d - %d 사이값을 입력해주세요", BOUND_MIN, BOUND_MAX); + private static final String ALERT_CHECK_LENGTH = String.format("당첨번호는 %d개 이어야 합니다.", LOTTO_LENGTH); + private static final String ALERT_CHECK_DUPLICATION = "중복되는 숫자가 포함되어 있는지 확인해주세요."; + private static final String ALERT_CHECK_BONUS_DUPLICATE = "보너스볼이 당첨 번호와 중복되는지 확인해주세요."; + private static final String ALERT_CHECK_PAYMENT_MANUAL= "구매 금액 이상의 수동 로또를 살 수 없습니다."; + private static final String ALERT_CHECK_PAYMENT= "1000원 단위의 금액만 투입할 수 있습니다."; + + public int checkGivenMoney(String givenMoney) { + if (!Pattern.matches(LOTTO_PRICE_PATTERN, givenMoney)) { + throw new IllegalArgumentException(ALERT_CHECK_PAYMENT); + } + return Integer.parseInt(givenMoney); + } + + public void lottoNumberValidate(List winningNumbers) { + checkListBound(winningNumbers); + checkLength(winningNumbers); + checkDuplicate(winningNumbers); + } + + public void checkBound(int number) { + if (BOUND_MIN > number || number > BOUND_MAX) { + throw new IllegalArgumentException(ALERT_CHECK_BOUND); + } + } + + public void checkBonusDuplicate(int bonusInputNumber, List winningNumber) { + boolean isDuplicate = winningNumber.stream() + .anyMatch(number -> bonusInputNumber == number); + + if (isDuplicate) { + throw new IllegalArgumentException(ALERT_CHECK_BONUS_DUPLICATE); + } + } + + private void checkListBound(List winningNumbers) { + for (Integer winningNumber : winningNumbers) { + checkBound(winningNumber); + } + } + private void checkLength(List winningNumbers) { + if (winningNumbers.size() != LOTTO_LENGTH) { + throw new IllegalArgumentException(ALERT_CHECK_LENGTH); + + } + } + private void checkDuplicate(List winningNumbers) { + int countOfDeDuplication = (int) winningNumbers.stream() + .distinct() + .count(); + + if (countOfDeDuplication != winningNumbers.size()) { + throw new IllegalArgumentException(ALERT_CHECK_DUPLICATION); + } + } + + public void canbyAllTickets(int totalCount, int manulCount) { + if(totalCount lottos; + + public Lottos(List lottos) { + this.lottos = lottos; + } + + public List getLottos() { + return lottos; + } +} diff --git a/src/main/java/enums/Rank.java b/src/main/java/com/study/enums/Rank.java similarity index 97% rename from src/main/java/enums/Rank.java rename to src/main/java/com/study/enums/Rank.java index 6c8bf711..a8204c85 100644 --- a/src/main/java/enums/Rank.java +++ b/src/main/java/com/study/enums/Rank.java @@ -1,4 +1,4 @@ -package enums; +package com.study.enums; import java.util.Arrays; diff --git a/src/main/java/com/study/enums/RankMap.java b/src/main/java/com/study/enums/RankMap.java new file mode 100644 index 00000000..ec9e7180 --- /dev/null +++ b/src/main/java/com/study/enums/RankMap.java @@ -0,0 +1,18 @@ +package com.study.enums; + +import java.util.EnumMap; + +public class RankMap extends EnumMap { + + { + put(Rank.FIRST_PLACE, 0); + put(Rank.SECOND_PLACE, 0); + put(Rank.THIRD_PLACE, 0); + put(Rank.FOURTH_PLACE, 0); + put(Rank.FIFTH_PLACE, 0); + put(Rank.ETC, 0); + } + public RankMap(Class keyType) { + super(keyType); + } +} diff --git a/src/main/java/utils/InputValidation.java b/src/main/java/com/study/utils/InputValidation.java similarity index 89% rename from src/main/java/utils/InputValidation.java rename to src/main/java/com/study/utils/InputValidation.java index 4f107d12..2081d36a 100644 --- a/src/main/java/utils/InputValidation.java +++ b/src/main/java/com/study/utils/InputValidation.java @@ -1,4 +1,4 @@ -package utils; +package com.study.utils; import org.apache.commons.lang3.StringUtils; @@ -6,18 +6,14 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.regex.Pattern; import java.util.stream.Collectors; -public class InputValidation { +public class InputValidation { private static final String COMMA = ","; private static final String ALERT_CHECK_COMMA = String.format("구분자를 \"%s\"로 입력하셨는지 확인해주세요.", COMMA); private static final String ALERT_CHECK_NULL_OR_EMPTY = String.format("\"%s\"로 구분한 지난 주 당첨번호를 입력해주세요.", COMMA); - - - public static List toIntegers(List input) { return new ArrayList<>(Collections.unmodifiableList(input.stream() .mapToInt(Integer::parseInt) @@ -40,5 +36,7 @@ public void checkNullOrEmpty(String input) { } } - + public String removeBlank(String input) { + return input.replace(" ", ""); + } } diff --git a/src/main/java/com/study/view/InputView.java b/src/main/java/com/study/view/InputView.java new file mode 100644 index 00000000..eabf88cd --- /dev/null +++ b/src/main/java/com/study/view/InputView.java @@ -0,0 +1,57 @@ +package com.study.view; + +import com.study.utils.InputValidation; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class InputView { + + private static Scanner scanner = new Scanner(System.in); + private static final InputValidation INPUT_VALICATION = new InputValidation(); + + public String inputMoney() { + System.out.println("구입금액을 입력해 주세요."); + String money = scanner.nextLine(); + INPUT_VALICATION.checkNullOrEmpty(money); + return money; + } + + public int manualTicketCount() { + System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); + String manulTicketCount = scanner.nextLine(); + INPUT_VALICATION.checkNullOrEmpty(manulTicketCount); + return Integer.parseInt(manulTicketCount); + } + + public List> manualLottlNumbers(int manulTicketCount) { + System.out.println("수동으로 구매할 번호를 입력해 주세요."); + List> lottos = new ArrayList<>(); + for (int i = 0; i < manulTicketCount; i++) { + List lottoNumbers = manualLottlNumber(); + lottos.add(lottoNumbers); + } + return lottos; + } + + public String inputWinningNumbers() { + System.out.println("지난 주 당첨 번호를 입력해 주세요."); + String winningNumber = scanner.nextLine(); + INPUT_VALICATION.checkNullOrEmpty(winningNumber); + return winningNumber; + } + + public String inputBonusBall() { + System.out.println("보너스 볼을 입력해 주세요."); + return scanner.nextLine(); + } + + private List manualLottlNumber() { + String manulTicketCount = INPUT_VALICATION.removeBlank(scanner.nextLine()); + INPUT_VALICATION.checkNullOrEmpty(manulTicketCount); + List manulLottoNumbers = InputValidation.splitByComma(manulTicketCount); + return InputValidation.toIntegers(manulLottoNumbers); + } + +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/com/study/view/OutputView.java similarity index 79% rename from src/main/java/view/OutputView.java rename to src/main/java/com/study/view/OutputView.java index 402abdd1..9837befe 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/com/study/view/OutputView.java @@ -1,15 +1,16 @@ -package view; +package com.study.view; -import domain.Lotto; -import enums.Rank; +import com.study.domain.Lotto; +import com.study.domain.Lottos; +import com.study.enums.Rank; import java.util.List; import java.util.Map; public class OutputView { - public void printLottoTickets(List lottoTickets) { - System.out.println(lottoTickets.size() + "개를 구매했습니다."); - for (Lotto lottoTicket : lottoTickets) { + public void printLottoTickets(Lottos lottos) { + System.out.println(lottos.getLottos().size() + "개를 구매했습니다."); + for (Lotto lottoTicket : lottos.getLottos()) { System.out.println(getLottoNumberString(lottoTicket.getLottoNumbers())); } } diff --git a/src/main/java/domain/LottoMachine.java b/src/main/java/domain/LottoMachine.java deleted file mode 100644 index 36849c53..00000000 --- a/src/main/java/domain/LottoMachine.java +++ /dev/null @@ -1,138 +0,0 @@ -package domain; - -import enums.Rank; -import utils.InputValidation; - -import java.util.*; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class LottoMachine { - - private static final int LOTTO_PRICE = 1000; - private final int lottoTicketCount; - private static final String LOTTO_PRICE_PATTERN = "\\d*000"; - private final int money; - private static final int BOUND_MIN = 1; - private static final int BOUND_MAX = 45; - private static final int LOTTO_LENGTH = 6; - private static InputValidation inputValidation = new InputValidation(); - private static final String ALERT_CHECK_BOUND = String.format("당첨번호는 %d - %d 사이값을 입력해주세요", BOUND_MIN, BOUND_MAX); - private static final String ALERT_CHECK_LENGTH = String.format("당첨번호는 %d개 이어야 합니다.", LOTTO_LENGTH); - private static final String ALERT_CHECK_DUPLICATION = "중복되는 숫자가 포함되어 있는지 확인해주세요."; - private static final String ALERT_CHECK_BONUS_DUPLICATE = "보너스볼이 당첨 번호와 중복되는지 확인해주세요."; - - public LottoMachine(String inputMoney) { - this.money = checkGivenMoney(inputMoney); - this.lottoTicketCount = this.money / LOTTO_PRICE; - } - - private int checkGivenMoney(String givenMoney) { - if (!Pattern.matches(LOTTO_PRICE_PATTERN, givenMoney)) { - throw new RuntimeException("1000원 단위의 금액만 투입할 수 있습니다."); - } - return Integer.parseInt(givenMoney); - } - - public int getLottoTicketCount() { - return this.lottoTicketCount; - } - - public List createRandomNumber() { - List balls = IntStream.range(1, 45) - .boxed() - .collect(Collectors.toList()); - Collections.shuffle(balls); - List lottoNumbers = balls.subList(0, 6); - Collections.sort(lottoNumbers); - return lottoNumbers; - } - - public List getLottoTickets() { - List lottoTicket = new ArrayList<>(); - for (int i = 0; i < lottoTicketCount; i++) { - lottoTicket.add(new Lotto(createRandomNumber())); - } - return lottoTicket; - } - - public TreeMap getRankResult(List lottos, List winningNumber, int bonusNumber) { - - TreeMap result = new TreeMap() {{ - put(Rank.FIRST_PLACE, 0); - put(Rank.SECOND_PLACE, 0); - put(Rank.THIRD_PLACE, 0); - put(Rank.FOURTH_PLACE, 0); - put(Rank.FIFTH_PLACE, 0); - put(Rank.ETC, 0); - }}; - - for (Lotto lotto : lottos) { - result.put(lotto.getRank(winningNumber, bonusNumber), result.get(lotto.getRank(winningNumber, bonusNumber)) + 1); - } - return result; - } - - public double getProfitRate(Map rankResult) { - double totalPrize = rankResult.entrySet() - .stream() - .mapToDouble((rank) -> rank.getKey().prize() * rank.getValue()) - .sum(); - return totalPrize / this.money; - } - - public List getWinningNumber(String winningNumber) { - List winningNumbers = inputValidation.toIntegers(inputValidation.splitByComma(winningNumber)); - winningNumberValidate(winningNumbers); - return winningNumbers; - } - private void winningNumberValidate(List winningNumbers) { - checkListBound(winningNumbers); - checkLength(winningNumbers); - checkDuplicate(winningNumbers); - } - - private void checkListBound(List winningNumbers) { - for (Integer winningNumber : winningNumbers) { - checkBound(winningNumber); - } - } - - public void checkBound(int number) { - if (BOUND_MIN > number || number > BOUND_MAX) { - throw new IllegalArgumentException(ALERT_CHECK_BOUND); - } - } - - private void checkLength(List winningNumbers) { - if (winningNumbers.size() != LOTTO_LENGTH) { - throw new IllegalArgumentException(ALERT_CHECK_LENGTH); - - } - } - - private void checkDuplicate(List winningNumbers) { - int countOfDeDuplication = (int) winningNumbers.stream() - .distinct() - .count(); - - if (countOfDeDuplication != winningNumbers.size()) { - throw new IllegalArgumentException(ALERT_CHECK_DUPLICATION); - } - } - public int getBonusBall(String bonusInput, List winningNumber) { - int bonusInputNumber = Integer.parseInt(bonusInput); - checkBound(bonusInputNumber); - checkBonusDuplicate(bonusInputNumber, winningNumber); - return bonusInputNumber; - } - private void checkBonusDuplicate(int bonusInputNumber, List winningNumber) { - boolean isDuplicate = winningNumber.stream() - .anyMatch(number -> bonusInputNumber == number); - - if (isDuplicate) { - throw new IllegalArgumentException(ALERT_CHECK_BONUS_DUPLICATE); - } - } -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java deleted file mode 100644 index b57a386e..00000000 --- a/src/main/java/view/InputView.java +++ /dev/null @@ -1,32 +0,0 @@ -package view; - -import utils.InputValidation; - -import java.util.List; -import java.util.Scanner; - -public class InputView { - - private static Scanner scanner = new Scanner(System.in); - private static InputValidation inputValidation = new InputValidation(); - - public String inputMoney() { - System.out.println("구입금액을 입력해 주세요."); - String money = scanner.nextLine(); - inputValidation.checkNullOrEmpty(money); - return money; - } - - public String inputWinningNumbers() { - System.out.println("지난 주 당첨 번호를 입력해 주세요."); - String winningNumber = scanner.nextLine(); - inputValidation.checkNullOrEmpty(winningNumber); - return winningNumber; - } - - public String inputBonusBall() { - System.out.println("보너스 볼을 입력해 주세요."); - return scanner.nextLine(); - } - -} diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/com/study/domain/LottoTest.java similarity index 92% rename from src/test/java/domain/LottoTest.java rename to src/test/java/com/study/domain/LottoTest.java index 7f0797f8..0273f68b 100644 --- a/src/test/java/domain/LottoTest.java +++ b/src/test/java/com/study/domain/LottoTest.java @@ -1,6 +1,8 @@ -package domain; +package com.study.domain; -import enums.Rank; +import com.study.domain.Lotto; +import com.study.domain.LottoMachine; +import com.study.enums.Rank; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/domain/LottoMachineTest.java b/src/test/java/com/study/domain/LottoValicationTest.java similarity index 71% rename from src/test/java/domain/LottoMachineTest.java rename to src/test/java/com/study/domain/LottoValicationTest.java index b5db52ea..fd541a9b 100644 --- a/src/test/java/domain/LottoMachineTest.java +++ b/src/test/java/com/study/domain/LottoValicationTest.java @@ -1,6 +1,7 @@ -package domain; +package com.study.domain; -import enums.Rank; +import com.study.enums.Rank; +import com.study.enums.RankMap; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -8,20 +9,13 @@ import static org.assertj.core.api.Assertions.*; -public class LottoMachineTest { +public class LottoValicationTest { + LottoValication lottoValication = new LottoValication(); - @Test - void 돈을_입력받으면_구매한_로또_수를_리턴한다() { - //given - String givenMoney = "14000"; - LottoMachine lottoMachine = new LottoMachine(givenMoney); - //when //than - assertThat(lottoMachine.getLottoTicketCount()).isEqualTo(14); - } @Test void _1에서_45_사이의_로또번호와_중복된_보너스번호_입력_하면_에러_리턴() { //given - String bonusNumbers = "45"; + int bonusNumbers = 45; List winningNumber = new ArrayList<>(); winningNumber.add(1); winningNumber.add(2); @@ -30,48 +24,46 @@ public class LottoMachineTest { winningNumber.add(5); winningNumber.add(45); //when - LottoMachine machine = new LottoMachine("1000"); + //then assertThatThrownBy( - () -> machine.getBonusBall(bonusNumbers, winningNumber)) + () -> lottoValication.checkBonusDuplicate(bonusNumbers, winningNumber)) .isInstanceOf(IllegalArgumentException.class); } + @Test @DisplayName("입력 숫자의 범위가 1-45가 아닐 경우 예외가 발생한다.") - public void checkBound() { + void checkBound() { //given - String bonusNumbers = "46"; List winningNumber = new ArrayList<>(); winningNumber.add(1); winningNumber.add(2); winningNumber.add(3); winningNumber.add(4); winningNumber.add(5); - winningNumber.add(45); + winningNumber.add(0); //when - LottoMachine machine = new LottoMachine("1000"); + // then - assertThatIllegalArgumentException().isThrownBy(() -> machine.getBonusBall(bonusNumbers, winningNumber)); + assertThatIllegalArgumentException().isThrownBy(() -> lottoValication.lottoNumberValidate(winningNumber)); } @Test @DisplayName("입력 숫자가 음수 일 경우 경우 예외가 발생한다.") - public void checkBoundMinus() { + void checkBoundMinus() { //given - String bonusNumbers = "-46"; List winningNumber = new ArrayList<>(); winningNumber.add(1); winningNumber.add(2); winningNumber.add(3); winningNumber.add(4); winningNumber.add(5); - winningNumber.add(45); + winningNumber.add(-45); //when - LottoMachine machine = new LottoMachine("1000"); // then - assertThatIllegalArgumentException().isThrownBy(() -> machine.getBonusBall(bonusNumbers, winningNumber)); + assertThatIllegalArgumentException().isThrownBy(() -> lottoValication.lottoNumberValidate(winningNumber)); } @Test @@ -87,19 +79,19 @@ public void checkBoundMinus() { winningNumber.add(6); //when LottoMachine machine = new LottoMachine("1000"); - int result = machine.getBonusBall(bonusNumbers, winningNumber); + int result = machine.getBonusBall(bonusNumbers, winningNumber); //then assertThat(result).isEqualTo(45); } + @Test void 문자_100을_입력받으면_런타임에러를_리턴한다() { //given String givenMoney = "100"; //when //then - assertThatThrownBy(() -> - new LottoMachine(givenMoney)). - isInstanceOf(RuntimeException.class); + assertThatIllegalArgumentException().isThrownBy(() -> + lottoValication.checkGivenMoney(givenMoney)); } @Test @@ -136,18 +128,6 @@ public void checkBoundMinus() { } - @Test - void 부여받은_티켓_개수대로_로또_만들어서_리턴한다() { - //given - String money = "1000"; - LottoMachine lottoMachine = new LottoMachine(money); - //when - List lottoTickets = lottoMachine.getLottoTickets(); - //than - assertThat(lottoTickets.size()).isEqualTo(1); - - } - @Test @DisplayName("1등_당첨_결과를_리턴한다") void getRankResult() { @@ -158,15 +138,15 @@ void getRankResult() { Lotto lotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6)); lottoTicket.add(lotto); - + Lottos lottos = new Lottos(lottoTicket); //when - TreeMap rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 4, 5, 6), 7); + RankMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 6), 7); //then assertThat(rankResult.get(Rank.FIRST_PLACE)).isEqualTo(1); - assertThat(rankResult.get(Rank.SECOND_PLACE)).isEqualTo(0); - assertThat(rankResult.get(Rank.THIRD_PLACE)).isEqualTo(0); + assertThat(rankResult.get(Rank.SECOND_PLACE)).isZero(); + assertThat(rankResult.get(Rank.THIRD_PLACE)).isZero(); } @Test @@ -179,10 +159,11 @@ void getRankResult2() { Lotto lotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6)); lottoTicket.add(lotto); + Lottos lottos = new Lottos(lottoTicket); //when - TreeMap rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 4, 5, 7), 6); + RankMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 7), 6); //then assertThat(rankResult.get(Rank.SECOND_PLACE)).isEqualTo(1); @@ -198,9 +179,9 @@ void getProfitRate() { Lotto lotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6)); lottoTicket.add(lotto); - + Lottos lottos = new Lottos(lottoTicket); //when - Map rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 4, 5, 6), 7); + Map rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 6), 7); double profitRate = lottoMachine.getProfitRate(rankResult); //then @@ -222,9 +203,9 @@ void getProfitRate2() { lottoTicket.add(lotto2); lottoTicket.add(lotto2); lottoTicket.add(lotto2); - + Lottos lottos = new Lottos(lottoTicket); //when - Map rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 11, 12, 13), 7); + Map rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 11, 12, 13), 7); double profitRate = lottoMachine.getProfitRate(rankResult); //then diff --git a/src/test/java/enums/RankTest.java b/src/test/java/com/study/enums/RankTest.java similarity index 96% rename from src/test/java/enums/RankTest.java rename to src/test/java/com/study/enums/RankTest.java index 8ee367c2..609c3094 100644 --- a/src/test/java/enums/RankTest.java +++ b/src/test/java/com/study/enums/RankTest.java @@ -1,5 +1,6 @@ -package enums; +package com.study.enums; +import com.study.enums.Rank; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test;