diff --git a/README.md b/README.md index 2038458afa..e5b3876742 100644 --- a/README.md +++ b/README.md @@ -46,3 +46,19 @@ - 3, 4, 5, 6개의 당첨에 따른 가격을 알 수 있다. - 3, 4, 5, 6개의 당첨 횟수를 알 수 있다. - 당첨 수익률을 알 수 있다. + + +# 로또 수동 +- 사용자의 입력에 문제가 있으면 에러처리를 하도록 한다. + - 숫자가 아닌 경우 + - 숫자가 6개를 넘는 경우 + - 1 ~ 45번이 아닌 경우 + - +- 수동으로 살 로또의 개수를 입력받는다(LottoMachine) + - 수동 개수 / 자동 개수 분리 + - 수동 개수 입력이 완료되었는지 관리 + - 수동의 개수가 전체 개수보다 많을 수 없다. + - 수동의 제외 나머지는 자동으로 관리한다. +- 수동으로 구매할 번호를 입력받는다. +- 수동으로 살 로또의 개수와 구매할 번호의 세트의 수가 같은지 확인이 필요 +- Lotto에서는 수동과 자동의 번호 개수를 같이 관리한다.(생성자 필요) diff --git a/src/main/java/calculator/controller/Calculator.java b/src/main/java/calculator/controller/Calculator.java index 947b04f0f2..0ae2fb0773 100644 --- a/src/main/java/calculator/controller/Calculator.java +++ b/src/main/java/calculator/controller/Calculator.java @@ -1,7 +1,7 @@ package calculator.controller; -import calculator.domain.Operator; import calculator.domain.Number; +import calculator.domain.Operator; import java.util.List; import java.util.Objects; @@ -16,7 +16,6 @@ public Calculator(List numbers, List operators) { } - public Number calculate() { Number result = numbers.getFirst(); diff --git a/src/main/java/controller/Calculator.java b/src/main/java/controller/Calculator.java index ea9c59a0e5..edfaf9f56d 100644 --- a/src/main/java/controller/Calculator.java +++ b/src/main/java/controller/Calculator.java @@ -1,7 +1,7 @@ package controller; -import domain.Operator; import domain.Number; +import domain.Operator; import domain.OperatorFactory; import util.Parser; @@ -29,7 +29,7 @@ public Calculator(List numbers, List operators) { private static List parseNumbers(String[] expression) { List numbers = new ArrayList<>(); - for (int i = 0; i < expression.length; i+=2) { + for (int i = 0; i < expression.length; i += 2) { numbers.add(new domain.Number(expression[i])); } @@ -38,7 +38,7 @@ private static List parseNumbers(String[] expression) { private static List parseOperators(String[] expression) { List operators = new ArrayList<>(); - for (int i = 1; i < expression.length - 1; i+=2) { + for (int i = 1; i < expression.length - 1; i += 2) { operators.add(OperatorFactory.getOperator(expression[i])); } diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java index 34d689e994..2fbe3b80b7 100644 --- a/src/main/java/lotto/LottoApplication.java +++ b/src/main/java/lotto/LottoApplication.java @@ -1,30 +1,39 @@ package lotto; -import lotto.controller.LottoMachine; -import lotto.domain.WinningLotto; -import lotto.domain.Lotto; -import lotto.domain.LottoNumber; -import lotto.domain.LottoResult; +import lotto.controller.LottosBundleGenerator; +import lotto.domain.*; import lotto.ui.InputView; import lotto.ui.ResultView; -import lotto.util.LottoNumberParser; + +import java.util.List; public class LottoApplication { public static void main(String[] args) { - String purchaseAmount = InputView.getPurchaseAmount(); + try { + String purchaseAmount = InputView.getPurchaseAmount(); + String manualLottoCount = InputView.getManualNumberCount(); + + LottoPrice price = new LottoPrice(purchaseAmount); + LottoCount manualCount = new LottoCount(manualLottoCount); + + InputView.printStartManualNumbersInput(); + List manualLottos = InputView.getManualLottosNumbers(new LottoCount(manualLottoCount)); - LottoMachine lottoMachine = new LottoMachine(purchaseAmount); - Lotto lotto = lottoMachine.generate(); + LottosBundleGenerator lottosBundleGenerator = new LottosBundleGenerator(price, manualCount, manualLottos); + Lotto lotto = lottosBundleGenerator.generate(); - ResultView.printLotto(lotto); + ResultView.printLotto(manualCount, manualCount.diffFromPrice(price), lotto); - String winningNumbers = InputView.getWinningNumber(); - String bonusNumber = InputView.getBonusNumber(); + String winningNumbers = InputView.getWinningNumber(); + String bonusNumber = InputView.getBonusNumber(); - WinningLotto winningLotto = new WinningLotto(winningNumbers, bonusNumber); - LottoResult result = lotto.getMatchResult(winningLotto); + WinningLotto winningLotto = new WinningLotto(winningNumbers, bonusNumber); + LottoResult result = lotto.getMatchResult(winningLotto); - ResultView.printLottoResult(result.toString()); - ResultView.printProfit(result.getProfit()); + ResultView.printLottoResult(result.toString()); + ResultView.printProfit(result.getProfit()); + } catch (Exception ex) { + ResultView.printError(ex.getMessage()); + } } } diff --git a/src/main/java/lotto/controller/LottoMachine.java b/src/main/java/lotto/controller/AutoLottoMachine.java similarity index 54% rename from src/main/java/lotto/controller/LottoMachine.java rename to src/main/java/lotto/controller/AutoLottoMachine.java index 2884779e2e..bb1120a749 100644 --- a/src/main/java/lotto/controller/LottoMachine.java +++ b/src/main/java/lotto/controller/AutoLottoMachine.java @@ -1,32 +1,28 @@ package lotto.controller; import lotto.domain.Lotto; +import lotto.domain.LottoCount; import lotto.domain.LottoNumbers; -import lotto.domain.LottoPrice; import lotto.util.LottoNumberParser; import lotto.util.RandomNumbersGenerator; import java.util.ArrayList; import java.util.List; -public class LottoMachine { - private final LottoPrice lottoPrice; +public class AutoLottoMachine implements LottoGenerator { + private final LottoCount autoCount; - public LottoMachine(String price) { - this(new LottoPrice(price)); - } - - public LottoMachine(LottoPrice lottoPrice) { - this.lottoPrice = lottoPrice; + public AutoLottoMachine(LottoCount autoCount) { + this.autoCount = autoCount; } + @Override public Lotto generate() { List lottoNumbersList = new ArrayList<>(); - - for (int i = 0; i < lottoPrice.count(); i++) { + for (int i = 0; !autoCount.isCountSame(i); i++) { lottoNumbersList.add(new LottoNumbers(LottoNumberParser.parse(RandomNumbersGenerator.randomNumbers()))); } - return new Lotto(lottoPrice, lottoNumbersList); + return new Lotto(lottoNumbersList); } } diff --git a/src/main/java/lotto/controller/LottoGenerator.java b/src/main/java/lotto/controller/LottoGenerator.java new file mode 100644 index 0000000000..495161012e --- /dev/null +++ b/src/main/java/lotto/controller/LottoGenerator.java @@ -0,0 +1,7 @@ +package lotto.controller; + +import lotto.domain.Lotto; + +public interface LottoGenerator { + Lotto generate(); +} diff --git a/src/main/java/lotto/controller/LottosBundleGenerator.java b/src/main/java/lotto/controller/LottosBundleGenerator.java new file mode 100644 index 0000000000..ae846c1187 --- /dev/null +++ b/src/main/java/lotto/controller/LottosBundleGenerator.java @@ -0,0 +1,34 @@ +package lotto.controller; + +import lotto.domain.Lotto; +import lotto.domain.LottoCount; +import lotto.domain.LottoPrice; + +import java.util.List; + +public class LottosBundleGenerator implements LottoGenerator { + private final List lottosGenerators; + + public LottosBundleGenerator(LottoPrice price, LottoCount manualCount, List manualLottoText) { + this(toLottosGenerators(price, manualCount, manualLottoText)); + } + + public LottosBundleGenerator(List lottosGenerators) { + this.lottosGenerators = lottosGenerators; + } + + private static List toLottosGenerators(LottoPrice price, LottoCount manualCount, List manualLottoText) { + return List.of(new AutoLottoMachine(manualCount.diffFromPrice(price)), new ManualLottoMachine(manualLottoText)); + } + + @Override + public Lotto generate() { + Lotto lotto = new Lotto(); + + for (LottoGenerator lottosGenerator : lottosGenerators) { + lotto = new Lotto(lotto, lottosGenerator.generate()); + } + + return lotto; + } +} \ No newline at end of file diff --git a/src/main/java/lotto/controller/ManualLottoMachine.java b/src/main/java/lotto/controller/ManualLottoMachine.java new file mode 100644 index 0000000000..327080e7b9 --- /dev/null +++ b/src/main/java/lotto/controller/ManualLottoMachine.java @@ -0,0 +1,27 @@ +package lotto.controller; + +import lotto.domain.Lotto; +import lotto.domain.LottoNumbers; +import lotto.util.LottoNumberParser; + +import java.util.ArrayList; +import java.util.List; + +public class ManualLottoMachine implements LottoGenerator { + private final List lottoNumbersList; + + public ManualLottoMachine(List manualLottoNumbers) { + this.lottoNumbersList = manualLottoNumbers; + } + + @Override + public Lotto generate() { + List lottoNumbersList = new ArrayList<>(); + + for (int i = 0; i < this.lottoNumbersList.size(); i++) { + lottoNumbersList.add(new LottoNumbers(LottoNumberParser.parse(this.lottoNumbersList.get(i)))); + } + + return new Lotto(lottoNumbersList); + } +} diff --git a/src/main/java/lotto/domain/Lotto.java b/src/main/java/lotto/domain/Lotto.java index fb7e176bad..87d5e5ec91 100644 --- a/src/main/java/lotto/domain/Lotto.java +++ b/src/main/java/lotto/domain/Lotto.java @@ -1,17 +1,29 @@ package lotto.domain; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Lotto { - private final LottoPrice price; private final List lottoNumbers; - public Lotto(LottoPrice price, List lottoNumbers) { - this.price = price; + public Lotto(Lotto... lottos) { + this(combineLottoNumbers(lottos)); + } + + public Lotto(List lottoNumbers) { this.lottoNumbers = lottoNumbers; } + private static List combineLottoNumbers(Lotto... lottos) { + List combined = new ArrayList<>(); + for (Lotto lotto : lottos) { + combined.addAll(lotto.lottoNumbers); + } + + return combined; + } + public LottoResult getMatchResult(WinningLotto winningLotto) { LottoResult result = new LottoResult(); @@ -23,10 +35,6 @@ public LottoResult getMatchResult(WinningLotto winningLotto) { return result; } - public String count() { - return String.valueOf(price.count()); - } - @Override public String toString() { return lottoNumbers.stream().map(LottoNumbers::toString).collect(Collectors.joining("\n")); diff --git a/src/main/java/lotto/domain/LottoCount.java b/src/main/java/lotto/domain/LottoCount.java new file mode 100644 index 0000000000..688ccc4f45 --- /dev/null +++ b/src/main/java/lotto/domain/LottoCount.java @@ -0,0 +1,44 @@ +package lotto.domain; + +import java.util.Objects; + +public class LottoCount { + private final int count; + + public LottoCount(String count) { + this(Integer.parseInt(count)); + } + + public LottoCount(int count) { + this.count = count; + } + + public LottoCount increase() { + return new LottoCount(this.count + 1); + } + + public boolean isCountSame(int count) { + return this.count == count; + } + + public LottoCount diffFromPrice(LottoPrice price) { + return new LottoCount(price.count() - count); + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + LottoCount that = (LottoCount) o; + return count == that.count; + } + + @Override + public int hashCode() { + return Objects.hashCode(count); + } + + @Override + public String toString() { + return String.valueOf(count); + } +} diff --git a/src/main/java/lotto/domain/LottoNumber.java b/src/main/java/lotto/domain/LottoNumber.java index f6f6cc780c..a0cc8cdfd2 100644 --- a/src/main/java/lotto/domain/LottoNumber.java +++ b/src/main/java/lotto/domain/LottoNumber.java @@ -1,18 +1,39 @@ package lotto.domain; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; public class LottoNumber { - private final int number; + private static final int MIN = 1; + private static final int MAX = 45; + private static final LottoNumber NONE = new LottoNumber(0); + private static final Map Cache = new HashMap<>(); - public LottoNumber(String number) { - this(Integer.parseInt(number)); + static { + for (int i = MIN; i <= MAX; i++) { + Cache.put(i, new LottoNumber(i)); + } } - public LottoNumber(int number) { + private final int number; + + private LottoNumber(int number) { this.number = number; } + public static LottoNumber get(int value) { + LottoNumber lottoNumber = Cache.getOrDefault(value, NONE); + if (lottoNumber == NONE) { + throw new IllegalArgumentException("로또의 숫자는 1에서 45 사이여야합니다."); + } + return Cache.get(value); + } + + public static LottoNumber get(String value) { + return get(Integer.parseInt(value)); + } + @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; diff --git a/src/main/java/lotto/domain/LottoNumbers.java b/src/main/java/lotto/domain/LottoNumbers.java index 178134f63b..cf54f2f2f3 100644 --- a/src/main/java/lotto/domain/LottoNumbers.java +++ b/src/main/java/lotto/domain/LottoNumbers.java @@ -2,9 +2,6 @@ import lotto.util.LottoNumberParser; -import java.sql.Array; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; diff --git a/src/main/java/lotto/domain/LottoPrice.java b/src/main/java/lotto/domain/LottoPrice.java index a6de71fbbd..cf657564a7 100644 --- a/src/main/java/lotto/domain/LottoPrice.java +++ b/src/main/java/lotto/domain/LottoPrice.java @@ -9,6 +9,9 @@ public LottoPrice(String price) { } public LottoPrice(int price) { + if (price <= PRICE_PER_LOTTO) { + throw new IllegalArgumentException("로또를 구매할 수 없는 가격입니다"); + } this.price = price; } diff --git a/src/main/java/lotto/domain/WinningLotto.java b/src/main/java/lotto/domain/WinningLotto.java index 7ff2ed4c4f..007ff740ca 100644 --- a/src/main/java/lotto/domain/WinningLotto.java +++ b/src/main/java/lotto/domain/WinningLotto.java @@ -8,7 +8,7 @@ public class WinningLotto { private final LottoNumber bonusNumber; public WinningLotto(String winningNumbers, String bonusNumber) { - this(new LottoNumbers(LottoNumberParser.parse(winningNumbers)), new LottoNumber(bonusNumber)); + this(new LottoNumbers(LottoNumberParser.parse(winningNumbers)), LottoNumber.get(bonusNumber)); } public WinningLotto(LottoNumbers winningNumbers, LottoNumber bonusNumber) { diff --git a/src/main/java/lotto/ui/InputView.java b/src/main/java/lotto/ui/InputView.java index 82e65b6ba3..5c66da0861 100644 --- a/src/main/java/lotto/ui/InputView.java +++ b/src/main/java/lotto/ui/InputView.java @@ -1,13 +1,18 @@ package lotto.ui; +import lotto.domain.LottoCount; + +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class InputView { + public static final String BONUS_BALL_MESSAGE = "보너스볼을 입력해주세요"; + public static final String MANUAL_NUMBER_COUNT_MESSAGE = "수동으로 구매할 로또 수를 입력해주세요."; + public static final String MANUAL_NUMBERS_INPUT_MESSAGE = "수동으로 구매할 번호를 입력해 주세요."; private static final String PURCHASE_AMOUNT_MESSAGE = "구입금액을 입력해 주세요."; private static final String WINNING_NUMBER_MESSAGE = "지난 주 당첨 번호 6개를 입력해 주세요."; - private static final Scanner scanner = new Scanner(System.in); - public static final String BONUS_BALL_MESSAGE = "보너스볼을 입력해주세요"; public static String getPurchaseAmount() { System.out.println(PURCHASE_AMOUNT_MESSAGE); @@ -24,5 +29,22 @@ public static String getBonusNumber() { return scanner.nextLine(); } + public static String getManualNumberCount() { + System.out.println(MANUAL_NUMBER_COUNT_MESSAGE); + return scanner.nextLine(); + } + + public static void printStartManualNumbersInput() { + System.out.println(MANUAL_NUMBERS_INPUT_MESSAGE); + } + + public static List getManualLottosNumbers(LottoCount manualLottoCount) { + List manualLottos = new ArrayList<>(); + for (int i = 0; !manualLottoCount.isCountSame(i); i++) { + manualLottos.add(scanner.nextLine()); + } + + return manualLottos; + } } diff --git a/src/main/java/lotto/ui/ResultView.java b/src/main/java/lotto/ui/ResultView.java index bece707366..dc865e8295 100644 --- a/src/main/java/lotto/ui/ResultView.java +++ b/src/main/java/lotto/ui/ResultView.java @@ -1,10 +1,12 @@ package lotto.ui; import lotto.domain.Lotto; +import lotto.domain.LottoCount; public class ResultView { private static final String LOTTO_COUNT_MESSAGE = "%s개를 구매했습니다.\n"; private static final String LOTTO_RESULT_MESSSAGE = "당첨 통계\n-------"; + private static final String LOTTO_COUNT_RESULT = "수동으로 %s장, 자동으로 %s장을 구매했습니다.\n"; private static void printLottoCount(String lottoCount) { System.out.printf(LOTTO_COUNT_MESSAGE, lottoCount); @@ -14,8 +16,8 @@ private static void printLottoNumbersList(String lottoList) { System.out.println(lottoList); } - public static void printLotto(Lotto lotto) { - printLottoCount(lotto.count()); + public static void printLotto(LottoCount manualCount, LottoCount autoCount, Lotto lotto) { + printLottoCount(String.format(LOTTO_COUNT_RESULT, manualCount, autoCount)); printLottoNumbersList(lotto.toString()); } @@ -27,4 +29,8 @@ public static void printLottoResult(String lottoResult) { public static void printProfit(String profit) { System.out.printf("총 수익률은 %s입니다.", profit); } + + public static void printError(String errorMessage) { + System.out.printf(String.format("Error : " + errorMessage)); + } } diff --git a/src/main/java/lotto/util/LottoNumberCache.java b/src/main/java/lotto/util/LottoNumberCache.java deleted file mode 100644 index 9c06ec4c1b..0000000000 --- a/src/main/java/lotto/util/LottoNumberCache.java +++ /dev/null @@ -1,31 +0,0 @@ -package lotto.util; - -import lotto.domain.LottoNumber; - -import java.util.HashMap; -import java.util.Map; - -public class LottoNumberCache { - private static final int MIN = 1; - private static final int MAX = 45; - private static final LottoNumber NONE = new LottoNumber(0); - private static final Map Cache = new HashMap<>(); - - static { - for (int i = MIN; i <= MAX; i++) { - Cache.put(i, new LottoNumber(i)); - } - } - - public static LottoNumber get(int value) { - LottoNumber lottoNumber = Cache.getOrDefault(value, NONE); - if (lottoNumber == NONE) { - throw new IllegalArgumentException("로또의 숫자는 1에서 45 사이여야합니다."); - } - return Cache.get(value); - } - - public static LottoNumber get(String value) { - return get(Integer.parseInt(value)); - } -} diff --git a/src/main/java/lotto/util/LottoNumberParser.java b/src/main/java/lotto/util/LottoNumberParser.java index da71081d86..3f19132c9a 100644 --- a/src/main/java/lotto/util/LottoNumberParser.java +++ b/src/main/java/lotto/util/LottoNumberParser.java @@ -10,9 +10,7 @@ public class LottoNumberParser { public static List parse(String input) { String[] splittedNumbers = input.split(SPLIT_REGELX); - for (String splittedNumber : splittedNumbers) { - System.out.println(splittedNumber); - } + if (!isValidInput(splittedNumbers)) { throw new IllegalArgumentException("정상적인 입력이 아닙니다."); } @@ -24,16 +22,16 @@ public static List parse(String[] numbers) { List lottoNumbers = new ArrayList<>(); for (String number : numbers) { - lottoNumbers.add(LottoNumberCache.get(number)); + lottoNumbers.add(LottoNumber.get(number)); } return lottoNumbers; } - public static List parse (int... numbers) { + public static List parse(int... numbers) { List list = new ArrayList<>(); for (int number : numbers) { - list.add(LottoNumberCache.get(number)); + list.add(LottoNumber.get(number)); } return list; @@ -42,7 +40,7 @@ public static List parse (int... numbers) { public static List parse(List numbers) { List list = new ArrayList<>(); for (int number : numbers) { - list.add(LottoNumberCache.get(number)); + list.add(LottoNumber.get(number)); } return list; } diff --git a/src/test/java/calculator/controller/CalculatorTest.java b/src/test/java/calculator/controller/CalculatorTest.java index 823c8e4228..43b39cf279 100644 --- a/src/test/java/calculator/controller/CalculatorTest.java +++ b/src/test/java/calculator/controller/CalculatorTest.java @@ -1,15 +1,14 @@ package calculator.controller; -import calculator.controller.Calculator; +import calculator.domain.Number; import calculator.domain.Operator; import calculator.domain.OperatorFactory; +import calculator.util.Parser; import org.junit.jupiter.api.Test; -import java.util.List; -import calculator.domain.Number; -import calculator.util.Parser; +import java.util.List; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class CalculatorTest { @Test diff --git a/src/test/java/calculator/domain/NumberTest.java b/src/test/java/calculator/domain/NumberTest.java index 347ef1aef6..2ab8784b5e 100644 --- a/src/test/java/calculator/domain/NumberTest.java +++ b/src/test/java/calculator/domain/NumberTest.java @@ -1,10 +1,9 @@ package calculator.domain; -import calculator.domain.Number; -import calculator.domain.OperatorFactory; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class NumberTest { @Test diff --git a/src/test/java/calculator/util/ParserTest.java b/src/test/java/calculator/util/ParserTest.java index 5810506d83..2d64a14f02 100644 --- a/src/test/java/calculator/util/ParserTest.java +++ b/src/test/java/calculator/util/ParserTest.java @@ -1,6 +1,5 @@ package calculator.util; -import calculator.util.Parser; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -13,4 +12,5 @@ public class ParserTest { assertThatIllegalArgumentException().isThrownBy(() -> { Parser.parse(input); }); - }} + } +} diff --git a/src/test/java/controller/CalculatorTest.java b/src/test/java/controller/CalculatorTest.java index 07d811aa6d..5a9d5a578a 100644 --- a/src/test/java/controller/CalculatorTest.java +++ b/src/test/java/controller/CalculatorTest.java @@ -1,13 +1,13 @@ package controller; +import domain.Number; import domain.Operator; import domain.OperatorFactory; import org.junit.jupiter.api.Test; -import java.util.List; -import domain.Number; +import java.util.List; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class CalculatorTest { @Test diff --git a/src/test/java/domain/NumberTest.java b/src/test/java/domain/NumberTest.java index e5c28d715a..372f9ea63b 100644 --- a/src/test/java/domain/NumberTest.java +++ b/src/test/java/domain/NumberTest.java @@ -2,7 +2,8 @@ import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class NumberTest { @Test diff --git a/src/test/java/domain/OperatorFactoryTest.java b/src/test/java/domain/OperatorFactoryTest.java index a10c421d61..18c33cb8a2 100644 --- a/src/test/java/domain/OperatorFactoryTest.java +++ b/src/test/java/domain/OperatorFactoryTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class OperatorFactoryTest { @Test diff --git a/src/test/java/lotto/domain/LottoCountTest.java b/src/test/java/lotto/domain/LottoCountTest.java new file mode 100644 index 0000000000..490a9862f6 --- /dev/null +++ b/src/test/java/lotto/domain/LottoCountTest.java @@ -0,0 +1,32 @@ +package lotto.domain; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LottoCountTest { + @Test + public void 생성() { + assertThat(new LottoCount("3")).isEqualTo(new LottoCount(3)); + } + + @Test + public void 증가() { + assertThat(new LottoCount(0).increase()).isEqualTo(new LottoCount(1)); + } + + @Test + public void 로또_개수_계산() { + assertThat(new LottoCount(3).diffFromPrice(new LottoPrice("5000"))).isEqualTo(new LottoCount(2)); + } + @ParameterizedTest + @CsvSource({ + "1, true", + "2, false", + }) + public void 카운트_일치_여부(int count, boolean expected) { + assertThat(new LottoCount(count).isCountSame(1)).isEqualTo(expected); + } +} diff --git a/src/test/java/lotto/domain/LottoNumberTest.java b/src/test/java/lotto/domain/LottoNumberTest.java index 6ee4503cd9..a8e4e04db3 100644 --- a/src/test/java/lotto/domain/LottoNumberTest.java +++ b/src/test/java/lotto/domain/LottoNumberTest.java @@ -2,11 +2,22 @@ import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class LottoNumberTest { @Test public void 생성() { - assertThat(new LottoNumber(1)).isEqualTo(new LottoNumber(1)); + assertThat(LottoNumber.get(1)).isEqualTo(LottoNumber.get("1")); + } + + @Test + public void 캐싱() { + assertThat(LottoNumber.get(1)).isEqualTo(LottoNumber.get(1)); + } + + @Test + public void 유효하지_않은_숫자() { + assertThatThrownBy(() -> LottoNumber.get(46)).isInstanceOf(IllegalArgumentException.class); } } diff --git a/src/test/java/lotto/domain/LottoNumbersTest.java b/src/test/java/lotto/domain/LottoNumbersTest.java index f936df7dea..5b09ff3843 100644 --- a/src/test/java/lotto/domain/LottoNumbersTest.java +++ b/src/test/java/lotto/domain/LottoNumbersTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class LottoNumbersTest { @Test @@ -13,7 +13,7 @@ public class LottoNumbersTest { @Test public void 포함_여부() { LottoNumbers lottoNumbers = new LottoNumbers(1, 2, 3, 4, 5, 6); - assertThat(lottoNumbers.contains(new LottoNumber(1))).isTrue(); + assertThat(lottoNumbers.contains(LottoNumber.get(1))).isTrue(); } @Test diff --git a/src/test/java/lotto/domain/LottoPriceTest.java b/src/test/java/lotto/domain/LottoPriceTest.java index 62815d3022..54fde877e7 100644 --- a/src/test/java/lotto/domain/LottoPriceTest.java +++ b/src/test/java/lotto/domain/LottoPriceTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class LottoPriceTest { @Test diff --git a/src/test/java/lotto/domain/LottoTest.java b/src/test/java/lotto/domain/LottoTest.java index ec32ab6a32..489357703a 100644 --- a/src/test/java/lotto/domain/LottoTest.java +++ b/src/test/java/lotto/domain/LottoTest.java @@ -4,7 +4,7 @@ import java.util.List; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; public class LottoTest { @Test @@ -18,9 +18,8 @@ public class LottoTest { new LottoNumbers(1, 2, 3, 4, 5, 11) ); - LottoPrice price = new LottoPrice(6000); LottoNumbers winningNumbers = new LottoNumbers(1, 2, 3, 4, 5, 6); - LottoNumber bonusNumber = new LottoNumber(11); + LottoNumber bonusNumber = LottoNumber.get(11); LottoResult lottoResult = new LottoResult(); lottoResult.add(LottoRank.FIRST); @@ -31,6 +30,6 @@ public class LottoTest { lottoResult.add(LottoRank.NONE); - assertThat(new Lotto(price, lottoNumbersList).getMatchResult(new WinningLotto(winningNumbers, bonusNumber))).isEqualTo(lottoResult); + assertThat(new Lotto(lottoNumbersList).getMatchResult(new WinningLotto(winningNumbers, bonusNumber))).isEqualTo(lottoResult); } } diff --git a/src/test/java/lotto/domain/PriceTest.java b/src/test/java/lotto/domain/PriceTest.java index c64ea20c07..efbcef8296 100644 --- a/src/test/java/lotto/domain/PriceTest.java +++ b/src/test/java/lotto/domain/PriceTest.java @@ -1,7 +1,8 @@ package lotto.domain; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; + +import static org.assertj.core.api.Assertions.assertThat; public class PriceTest { @Test diff --git a/src/test/java/lotto/domain/WinningLottoTest.java b/src/test/java/lotto/domain/WinningLottoTest.java index b4040c6c1a..5ed851b951 100644 --- a/src/test/java/lotto/domain/WinningLottoTest.java +++ b/src/test/java/lotto/domain/WinningLottoTest.java @@ -1,15 +1,14 @@ package lotto.domain; -import lotto.util.LottoNumberParser; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.List; import java.util.stream.Stream; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class WinningLottoTest { static Stream provideLottoNumbers() { @@ -27,7 +26,7 @@ static Stream provideLottoNumbers() { public void 일치하는_숫자의_개수(String numbers, LottoRank expected) { LottoNumbers lottoNumbers = new LottoNumbers(numbers); LottoNumbers winningLottoNumbers = new LottoNumbers(1, 2, 3, 4, 5, 6); - LottoNumber bonusNumber = new LottoNumber(13); + LottoNumber bonusNumber = LottoNumber.get(13); WinningLotto winningLotto = new WinningLotto(winningLottoNumbers, bonusNumber); assertThat(winningLotto.getMatchedRank(lottoNumbers)).isEqualTo(expected); diff --git a/src/test/java/lotto/util/LottoNumberCacheTest.java b/src/test/java/lotto/util/LottoNumberCacheTest.java deleted file mode 100644 index 7413a3e400..0000000000 --- a/src/test/java/lotto/util/LottoNumberCacheTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package lotto.util; - -import lotto.domain.LottoNumber; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.*; - -public class LottoNumberCacheTest { - @Test - public void 캐싱() { - assertThat(LottoNumberCache.get(1)).isEqualTo(new LottoNumber(1)); - } - - @Test - public void 유효하지_않은_숫자() { - assertThatThrownBy(() -> LottoNumberCache.get(46)).isInstanceOf(IllegalArgumentException.class); - } - -} diff --git a/src/test/java/lotto/util/LottoNumberParserTest.java b/src/test/java/lotto/util/LottoNumberParserTest.java index 62671dcf3f..26d01d0bd2 100644 --- a/src/test/java/lotto/util/LottoNumberParserTest.java +++ b/src/test/java/lotto/util/LottoNumberParserTest.java @@ -1,7 +1,8 @@ package lotto.util; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class LottoNumberParserTest { @Test diff --git a/src/test/java/util/ParserTest.java b/src/test/java/util/ParserTest.java index 58ad6917c1..16981b6174 100644 --- a/src/test/java/util/ParserTest.java +++ b/src/test/java/util/ParserTest.java @@ -12,4 +12,5 @@ public class ParserTest { assertThatIllegalArgumentException().isThrownBy(() -> { Parser.parse(input); }); - }} + } +}