diff --git a/build.gradle b/build.gradle index 8172fb7..d585e57 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,8 @@ repositories { dependencies { testImplementation "org.junit.jupiter:junit-jupiter:5.7.2" testImplementation "org.assertj:assertj-core:3.19.0" + testImplementation 'org.mockito:mockito-core:4.11.0' + } test { diff --git a/src/main/java/BaseballApplication.java b/src/main/java/BaseballApplication.java new file mode 100644 index 0000000..8f1f83d --- /dev/null +++ b/src/main/java/BaseballApplication.java @@ -0,0 +1,19 @@ +import study.Baseball; +import study.BaseballGame; +import study.BaseballScanner; + +public class BaseballApplication { + public static void main(String[] args){ + BaseballScanner scanner = new BaseballScanner(); + Baseball baseball = new Baseball(); + BaseballGame game = new BaseballGame(scanner, baseball); + + do { + String result = game.playGame(); + System.out.println(result); + + } while(game.isReplay()); + + System.out.println(game.endGame()); + } +} diff --git a/src/main/java/study/Baseball.java b/src/main/java/study/Baseball.java new file mode 100644 index 0000000..c2c2a1d --- /dev/null +++ b/src/main/java/study/Baseball.java @@ -0,0 +1,48 @@ +package study; + +import java.util.*; + +public class Baseball { + private final List answerList; + + public Baseball(){ + answerList = getAnswer(); + } + + public Baseball(List answerList) { + this.answerList = answerList; + } + + public BaseballScore play(List userInput){ + BaseballScore score = new BaseballScore(); + + for (int i=0; i getAnswer() { + List answers = new ArrayList<>(); + Random random = new Random(); + + while(answers.size() < 3){ + int num = random.nextInt(9)+1; + answers = addUniqueNumber(num, answers); + } + + return answers; + + } + + public List addUniqueNumber(int num, List answers){ + if (!answers.contains(num)){ + answers.add(num); + } + + return answers; + } + +} diff --git a/src/main/java/study/BaseballGame.java b/src/main/java/study/BaseballGame.java new file mode 100644 index 0000000..72200e4 --- /dev/null +++ b/src/main/java/study/BaseballGame.java @@ -0,0 +1,39 @@ +package study; + +import study.messages.SuccessMessages; + +import java.util.List; + +public class BaseballGame { + private final BaseballScanner scanner; + private final Baseball baseball; + + public BaseballGame(BaseballScanner scanner, Baseball baseball){ + this.scanner = scanner; + this.baseball = baseball; + } + + public String playGame(){ + boolean collect = false; + + while(!collect){ + List userInput = scanner.askNumbers(); + BaseballScore score = baseball.play(userInput); + + System.out.println(score.printScore()); + collect = score.isThreeStrike(); + } + + return SuccessMessages.CORRECT_GAME; + } + + public boolean isReplay(){ + int input = scanner.askReplay(); + return input != 2; + } + + public String endGame(){ + return SuccessMessages.END_GAME; + } + +} diff --git a/src/main/java/study/BaseballScanner.java b/src/main/java/study/BaseballScanner.java new file mode 100644 index 0000000..49ee2af --- /dev/null +++ b/src/main/java/study/BaseballScanner.java @@ -0,0 +1,88 @@ +package study; + +import study.messages.ErrorMessages; + +import java.util.*; + +public class BaseballScanner { + private final Scanner scanner; + + public BaseballScanner(){ + this.scanner = new Scanner(System.in); + } + + public List askNumbers() { + System.out.println("숫자를 입력해 주세요 : "); + String input; + + try{ + input = checkLength(scanner.next()); + } catch (NoSuchElementException ex){ + throw new NoSuchElementException(ErrorMessages.INVALID_INPUT); + } + + return convertList(input); + } + + public int askReplay(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int input; + + try{ + input = validateOneOrTwo(scanner.nextInt()); + } catch (NoSuchElementException ex){ + throw new NoSuchElementException(ErrorMessages.INVALID_INPUT_REPLAY); + } + + return input; + + } + + public String checkLength(String input){ + input = input.replace(" ", ""); + + if (input.length() != 3){ + throw new NoSuchElementException(ErrorMessages.INVALID_INPUT); + } + return input; + } + + public int parseStringToInt(String str){ + int result; + + try{ + result = Integer.parseInt(str); + } catch (NumberFormatException ex){ + throw new NumberFormatException(ErrorMessages.INVALID_INPUT_NUMBER); + } + + return result; + } + + + public List convertList(String input){ + List numbers = new ArrayList<>(); + String[] inputArr = input.split(""); + + for (String str: inputArr){ + int number = parseStringToInt(str); + numbers.add(number); + } + + return numbers; + } + + + public int validateOneOrTwo(int input){ + if (input == 1 || input == 2){ + return input; + } + + throw new NoSuchElementException(ErrorMessages.INVALID_INPUT_REPLAY); + } + + + public void close(){ + scanner.close(); + } +} diff --git a/src/main/java/study/BaseballScore.java b/src/main/java/study/BaseballScore.java new file mode 100644 index 0000000..1496acd --- /dev/null +++ b/src/main/java/study/BaseballScore.java @@ -0,0 +1,61 @@ +package study; + +public class BaseballScore { + private int strikeCnt; + private int ballCnt; + private int nothingCnt; + + + public BaseballScore() { + this.strikeCnt = 0; + this.ballCnt = 0; + this.nothingCnt = 0; + } + + public BaseballScore(int strikeCnt, int ballCnt, int nothingCnt) { + this.strikeCnt = strikeCnt; + this.ballCnt = ballCnt; + this.nothingCnt = nothingCnt; + } + + + public void addScore(int index, int i){ + if (index == -1){ + nothingCnt++; + } else if (index == i){ + strikeCnt++; + } else if(index != i){ + ballCnt++; + } + } + + public boolean isThreeStrike(){ + return strikeCnt == 3; + } + + public String printScore(){ + if(nothingCnt == 3) { + return "낫싱"; + } else if (ballCnt != 0 && strikeCnt != 0){ + return ballCnt + "볼 " + strikeCnt + "스트라이크"; + } else if (ballCnt == 0 && strikeCnt != 0){ + return strikeCnt + "스트라이크"; + } else if(ballCnt != 0){ + return ballCnt + "볼"; + } + + return ""; + } + + public int getStrikeCnt() { + return strikeCnt; + } + + public int getBallCnt() { + return ballCnt; + } + + public int getNothingCnt() { + return nothingCnt; + } +} diff --git a/src/main/java/study/messages/ErrorMessages.java b/src/main/java/study/messages/ErrorMessages.java new file mode 100644 index 0000000..e38c0e2 --- /dev/null +++ b/src/main/java/study/messages/ErrorMessages.java @@ -0,0 +1,7 @@ +package study.messages; + +public class ErrorMessages { + public static final String INVALID_INPUT = "3자리 숫자를 입력해주세요."; + public static final String INVALID_INPUT_NUMBER = "숫자만 입력 가능합니다."; + public static final String INVALID_INPUT_REPLAY = "1 또는 2 숫자만 입력 가능합니다."; +} diff --git a/src/main/java/study/messages/SuccessMessages.java b/src/main/java/study/messages/SuccessMessages.java new file mode 100644 index 0000000..d7e1918 --- /dev/null +++ b/src/main/java/study/messages/SuccessMessages.java @@ -0,0 +1,6 @@ +package study.messages; + +public class SuccessMessages { + public static final String CORRECT_GAME = "3개의 숫자를 모두 맞히셨습니다! 게임 종료"; + public static final String END_GAME = "게임이 종료되었습니다."; +} diff --git a/src/test/java/study/BaseballGameTest.java b/src/test/java/study/BaseballGameTest.java new file mode 100644 index 0000000..9ed50bf --- /dev/null +++ b/src/test/java/study/BaseballGameTest.java @@ -0,0 +1,73 @@ +package study; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import study.messages.SuccessMessages; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class BaseballGameTest { + + @Test + @DisplayName("playGame(): 3 스트라이크") + void playGame3Strike(){ + // given + List userInput = Arrays.asList(1, 2, 3); + + BaseballScanner scanner = mock(BaseballScanner.class); + Baseball baseball = mock(Baseball.class); + BaseballGame game = new BaseballGame(scanner, baseball); + + when(scanner.askNumbers()).thenReturn(userInput); + when(baseball.play(userInput)).thenReturn(new BaseballScore(3, 0, 0)); + + + // when + String response = game.playGame(); + + // then + assertEquals(response, SuccessMessages.CORRECT_GAME); + } + + @Test + @DisplayName("isReplayScanner(): 재게임 여부 1 입력으로 true 반환") + void isReplayInput1(){ + // given + BaseballScanner scanner = mock(BaseballScanner.class); + Baseball baseball = mock(Baseball.class); + BaseballGame game = new BaseballGame(scanner, baseball); + + when(scanner.askReplay()).thenReturn(1); + + // when + boolean response = game.isReplay(); + + // then + assertTrue(response); + } + + @Test + @DisplayName("isReplayScanner(): 재게임 여부 2 입력으로 false 반환") + void isReplayInput2(){ + // given + BaseballScanner scanner = mock(BaseballScanner.class); + Baseball baseball = mock(Baseball.class); + BaseballGame game = new BaseballGame(scanner, baseball); + + when(scanner.askReplay()).thenReturn(2); + + // when + boolean response = game.isReplay(); + + // then + assertFalse(response); + } + + + +} diff --git a/src/test/java/study/BaseballScannerTest.java b/src/test/java/study/BaseballScannerTest.java new file mode 100644 index 0000000..259b3a5 --- /dev/null +++ b/src/test/java/study/BaseballScannerTest.java @@ -0,0 +1,301 @@ +package study; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import study.messages.ErrorMessages; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.List; +import java.util.NoSuchElementException; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class BaseballScannerTest { + + // + // System.in 에 대한 입력 스트림이 설정 되기 전에 scanner 가 초기화 되면 scanner 가 읽을 데이터가 없는 상태가 될 수 있음 + // 특히 @BeforeEach 사용 시 System.in 설정 전에 먼저 객체가 생성되서 입력값이 없어서 예외 발생함 + + @Test + @DisplayName("askNumbers(): 사용자 입력 성공") + void askNumbers(){ + // given + String input = "456"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + List response = scanner.askNumbers(); + + // then + assertEquals(response.get(0), 4); + assertEquals(response.get(1), 5); + assertEquals(response.get(2), 6); + } + + @Test + @DisplayName("askNumbers(): 공백이 포함된 숫자 입력으로 예외 발생") + void askNumbersContainEmpty_exception(){ + // given + String input = "4 6"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, scanner::askNumbers); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT); + } + + @Test + @DisplayName("askNumbers(): 숫자 3자리 이상을 입력으로 예외 발생") + void askNumbersInputOverSizeThree_exception(){ + // given + String input = "123456"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, scanner::askNumbers); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT); + } + + @Test + @DisplayName("askNumbers(): 문자열 입력으로 예외 발생") + void askNumbersInputString_exception(){ + // given + String input = "문자열"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NumberFormatException fail = assertThrows(NumberFormatException.class, scanner::askNumbers); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_NUMBER); + } + + @Test + @DisplayName("askNumbers(): 공백 입력으로 예외 발생") + void askNumbersInputEmpty_exception(){ + // given + String input = " "; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, scanner::askNumbers); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT); + } + + + @Test + @DisplayName("askReplay(): 재게임 입력 성공") + void askReplay(){ + // given + String input = "1"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + int response = scanner.askReplay(); + + // then + assertEquals(response, Integer.parseInt(input)); + } + + @Test + @DisplayName("askReplay(): 문자열 입력으로 예외 발생") + void askReplayInputString_exception(){ + // given + String input = "문자열"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, scanner::askReplay); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_REPLAY); + } + + + @Test + @DisplayName("askReplay(): 공백 입력으로 예외 발생") + void askReplayInputEmpty_exception(){ + // given + String input = " "; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, scanner::askReplay); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_REPLAY); + } + + @Test + @DisplayName("askReplay(): 숫자 1 또는 2 이외의 숫자 입력으로 예외 발생") + void askReplayInputTwoNumber_exception(){ + String input = "34"; + InputStream in = new ByteArrayInputStream(input.getBytes()); + System.setIn(in); + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, scanner::askReplay); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_REPLAY); + } + + + @Test + @DisplayName("checkLength(): 숫자 3자리 검증 성공") + void checkLength(){ + // given + String input = "123"; + + // when + BaseballScanner scanner = new BaseballScanner(); + String response = scanner.checkLength(input); + + // then + assertEquals(response, input); + } + + @Test + @DisplayName("checkLength(): 숫자 3자리 이상을 입력으로 예외 발생") + void checkLengthInputOverSizeThree_exception(){ + // given + String input = "123456"; + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, () -> scanner.checkLength(input)); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT); + } + + @Test + @DisplayName("parseStringToInt(): 문자열 숫자로 변환 성공") + void parseStringToInt(){ + // given + String input = "123"; + + // when + BaseballScanner scanner = new BaseballScanner(); + int response = scanner.parseStringToInt(input); + + // then + assertEquals(response, 123); + } + + @Test + @DisplayName("parseStringToInt(): 문자열 숫자 변환 실패로 예외 발생") + void parseInputString_exception(){ + // given + String input = "문자열"; + + // when + BaseballScanner scanner = new BaseballScanner(); + NumberFormatException fail = assertThrows(NumberFormatException.class, () -> scanner.parseStringToInt(input)); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_NUMBER); + } + + @Test + @DisplayName("convertList(): 문자열을 숫자 리스트로 변환 성공") + void convertList(){ + // given + String input = "123"; + + // when + BaseballScanner scanner = new BaseballScanner(); + List response = scanner.convertList(input); + + // then + assertEquals(response.get(0), 1); + assertEquals(response.get(1), 2); + assertEquals(response.get(2), 3); + } + + + + @Test + @DisplayName("convertList(): 문자열 숫자 리스트 변환 실패로 예외 발생") + void convertListInputString_exception(){ + // given + String input = "문자열"; + + // when + BaseballScanner scanner = new BaseballScanner(); + NumberFormatException fail = assertThrows(NumberFormatException.class, () -> scanner.convertList(input)); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_NUMBER); + } + + @Test + @DisplayName("validateOneOrTwo(): 숫자 1 입력으로 성공") + void validateOneOrTwoInput1(){ + // given + int input = 1; + + // when + BaseballScanner scanner = new BaseballScanner(); + int response = scanner.validateOneOrTwo(input); + + // then + assertEquals(response, input); + } + + @Test + @DisplayName("validateOneOrTwo(): 숫자 2 입력으로 성공") + void validateOneOrTwoInput2(){ + // given + int input = 2; + + // when + BaseballScanner scanner = new BaseballScanner(); + int response = scanner.validateOneOrTwo(input); + + // then + assertEquals(response, input); + } + + + @Test + @DisplayName("validateOneOrTwo(): 1이나 2가 아닌 숫자 입력으로 예외 발생") + void validateOneOrTwoInputEither1Or2_exception(){ + // given + int input = 222; + + // when + BaseballScanner scanner = new BaseballScanner(); + NoSuchElementException fail = assertThrows(NoSuchElementException.class, () -> scanner.validateOneOrTwo(input)); + + // then + assertEquals(fail.getMessage(), ErrorMessages.INVALID_INPUT_REPLAY); + } + + +} diff --git a/src/test/java/study/BaseballScoreTest.java b/src/test/java/study/BaseballScoreTest.java new file mode 100644 index 0000000..f1f28a3 --- /dev/null +++ b/src/test/java/study/BaseballScoreTest.java @@ -0,0 +1,179 @@ +package study; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class BaseballScoreTest { + + @Test + @DisplayName("addScore(): 스트라이크인 경우") + void addScoreStrike(){ + // given + int index = 1; + int i = 1; + + // when + BaseballScore score = new BaseballScore(); + score.addScore(index, i); + + // then + assertEquals(score.getBallCnt(), 0); + assertEquals(score.getStrikeCnt(), 1); + assertEquals(score.getNothingCnt(), 0); + } + + @Test + @DisplayName("addScore(): 볼인 경우") + void addScoreBall(){ + // given + int index = 2; + int i = 1; + + // when + BaseballScore score = new BaseballScore(); + score.addScore(index, i); + + // then + assertEquals(score.getBallCnt(), 1); + assertEquals(score.getStrikeCnt(), 0); + assertEquals(score.getNothingCnt(), 0); + } + + @Test + @DisplayName("addScore(): ball, strike 둘 다 아닌 경우") + void addScoreNothing(){ + // given + int index = -1; + int i = 1; + + // when + BaseballScore score = new BaseballScore(); + score.addScore(index, i); + + // then + assertEquals(score.getBallCnt(), 0); + assertEquals(score.getStrikeCnt(), 0); + assertEquals(score.getNothingCnt(), 1); + } + + @Test + @DisplayName("isThreeStrike(): 3 스트라이크인 경우 true 반환") + void isThreeStrike(){ + // given + BaseballScore score = new BaseballScore(3, 0, 0); + + // when + boolean response = score.isThreeStrike(); + + // then + assertTrue(response); + } + + @Test + @DisplayName("isThreeStrike(): 3 스트라이크 아닌 경우 false 반환") + void isNotThreeStrike(){ + // given + BaseballScore score = new BaseballScore(1, 1, 1); + + // when + boolean response = score.isThreeStrike(); + + // then + assertFalse(response); + } + + @Test + @DisplayName("printScore(): 볼, 스트라이크 점수 출력") + void scorePrintBallAndStrike(){ + // given + int ballCnt = 1; + int strikeCnt = 2; + int nothingCnt = 0; + + BaseballScore score = new BaseballScore(strikeCnt, ballCnt, nothingCnt); + + // when + String response = score.printScore(); + + // then + assertEquals(response, ballCnt + "볼 " + strikeCnt + "스트라이크"); + + } + + @Test + @DisplayName("printScore(): 3 스트라이크 점수 출력") + void scorePrint3Strike(){ + // given + int ballCnt = 0; + int strikeCnt = 3; + int nothingCnt = 0; + + BaseballScore score = new BaseballScore(strikeCnt, ballCnt, nothingCnt); + + // when + String response = score.printScore(); + + // then + assertEquals(response, strikeCnt + "스트라이크"); + + } + + @Test + @DisplayName("printScore(): 스트라이크 점수 출력") + void scorePrintStrike(){ + // given + int ballCnt = 0; + int strikeCnt = 2; + int nothingCnt = 0; + + BaseballScore score = new BaseballScore(strikeCnt, ballCnt, nothingCnt); + + // when + String response = score.printScore(); + + // then + assertEquals(response, strikeCnt + "스트라이크"); + + } + + @Test + @DisplayName("printScore(): 볼 점수 출력") + void scorePrintBall(){ + // given + int ballCnt = 2; + int strikeCnt = 0; + int nothingCnt = 1; + + BaseballScore score = new BaseballScore(strikeCnt, ballCnt, nothingCnt); + + // when + String response = score.printScore(); + + // then + assertEquals(response, ballCnt + "볼"); + + } + + + @Test + @DisplayName("printScore(): 낫싱 점수 출력") + void scorePrintNothing(){ + // given + int ballCnt = 0; + int strikeCnt = 0; + int nothingCnt = 3; + + BaseballScore score = new BaseballScore(strikeCnt, ballCnt, nothingCnt); + + // when + String response = score.printScore(); + + // then + assertEquals(response, "낫싱"); + + } + + +} diff --git a/src/test/java/study/BaseballTest.java b/src/test/java/study/BaseballTest.java new file mode 100644 index 0000000..900f543 --- /dev/null +++ b/src/test/java/study/BaseballTest.java @@ -0,0 +1,151 @@ +package study; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.RepeatedTest; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.Mockito; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +public class BaseballTest { + + @Test + @DisplayName("play(): 3 스트라이크") + void play3Strike(){ + // given + List inputList = Arrays.asList(3, 5, 6); + List answerList = Arrays.asList(3, 5, 6); + + // when + Baseball baseball = new Baseball(answerList); + BaseballScore response = baseball.play(inputList); + + // then + assertEquals(response.getStrikeCnt(), 3); + assertEquals(response.getBallCnt(), 0); + assertEquals(response.getNothingCnt(), 0); + } + + @Test + @DisplayName("play(): 1 스트라이크 2볼") + void play1Strike2Ball(){ + // given + List inputList = Arrays.asList(3, 5, 6); + List answerList = Arrays.asList(3, 6, 5); + + // when + Baseball baseball = new Baseball(answerList); + BaseballScore response = baseball.play(inputList); + + // then + assertEquals(response.getStrikeCnt(), 1); + assertEquals(response.getBallCnt(), 2); + assertEquals(response.getNothingCnt(), 0); + } + + @Test + @DisplayName("play(): 3볼") + void play3Ball(){ + // given + List inputList = Arrays.asList(3, 5, 6); + List answerList = Arrays.asList(5, 6, 3); + + + // when + Baseball baseball = new Baseball(answerList); + BaseballScore response = baseball.play(inputList); + + // then + assertEquals(response.getStrikeCnt(), 0); + assertEquals(response.getBallCnt(), 3); + assertEquals(response.getNothingCnt(), 0); + + } + + @Test + @DisplayName("play(): 낫싱") + void playNothing(){ + // given + List inputList = Arrays.asList(3, 5, 6); + List answerList = Arrays.asList(7, 8, 9); + + + // when + Baseball baseball = new Baseball(answerList); + BaseballScore response = baseball.play(inputList); + + + // then + assertEquals(response.getStrikeCnt(), 0); + assertEquals(response.getBallCnt(), 0); + assertEquals(response.getNothingCnt(), 3); + + } + + + @RepeatedTest(10) // 10번 반복 테스트 + @DisplayName("getAnswer() 성공: 랜덤 3자리 수 생성") + void getAnswer(){ + // given + // when + Baseball baseball = new Baseball(); + List response = baseball.getAnswer(); + + // then + assertEquals(response.size(), 3); + assertNotNull(response.get(0)); + assertNotNull(response.get(1)); + assertNotNull(response.get(2)); + assertNotEquals(response.get(0), response.get(1)); + assertNotEquals(response.get(0), response.get(2)); + assertNotEquals(response.get(1), response.get(2)); + } + + @Test + @DisplayName("addUniqueNumber(): 리스트에 중복된 숫자 존재하지 않을 경우 리스트에 추가") + void addUniqueNumber(){ + // given + int num = 3; + List answers = new ArrayList<>(); + answers.add(4); + answers.add(1); + + // when + Baseball baseball = new Baseball(); + List response = baseball.addUniqueNumber(num, answers); + + // then + assertEquals(response.size(), 3); + assertEquals(response.get(0), answers.get(0)); + assertEquals(response.get(1), answers.get(1)); + assertEquals(response.get(2), num); + } + + @Test + @DisplayName("addUniqueNumber(): 리스트에 중복 숫자 존재하는 경우 리스트에 추가 안됨") + void addDuplicatedNumber(){ + // given + int num = 1; + List answers = new ArrayList<>(); + answers.add(4); + answers.add(1); + + // when + Baseball baseball = new Baseball(); + List response = baseball.addUniqueNumber(num, answers); + + // then + assertEquals(response.size(), answers.size()); + assertEquals(response.get(0), answers.get(0)); + assertEquals(response.get(1), answers.get(1)); + } + +} diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java deleted file mode 100644 index 43e47d9..0000000 --- a/src/test/java/study/StringTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package study; - -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class StringTest { - @Test - void replace() { - String actual = "abc".replace("b", "d"); - assertThat(actual).isEqualTo("adc"); - } -}