@@ -4,44 +4,36 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class LottoGameTest {
 
     @Test
-    @DisplayName("실제 로또 수익률과 예상한 로또 수익률이 같다면 성공이다.")
-    public void should_success_when_real_lotto_earning_ratio_matches_expected_lotto_yield() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
-        // given
+    public void should_success_when_real_lotto_earning_ratio_matches_expected_lotto_yield() throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
         LottoGame lottoGame = new LottoGame();
-        lottoGame.inputMoney(1000);
-
-        List<LottoNumber> testWinningLotto = new ArrayList<>();
-
-        for (int i = 1; i < 7; i++){
-            testWinningLotto.add(new LottoNumber(i));
+        lottoGame.calculateLottoCount(1000);
+        List<LottoNumber> lottoNumbers = new ArrayList<>();
+        for(int i=1; i<7; i++) {
+            lottoNumbers.add(new LottoNumber(i));
         }
+        List<Lotto> lottos = new ArrayList<>();
+        lottos.add(new Lotto(lottoNumbers));
 
-        List<Lotto> autoGeneratedLottos = new ArrayList<>();
-        autoGeneratedLottos.add(new Lotto(testWinningLotto));
-
-        Method method = lottoGame.getClass().getDeclaredMethod("generateLottoTicket",List.class);
+        Method method = lottoGame.getClass().getDeclaredMethod("makeLottoTicket", List.class);
         method.setAccessible(true);
 
-        method.invoke(lottoGame, autoGeneratedLottos);
-
-        lottoGame.calculateRankStatistics(new WinningLotto(testWinningLotto));
+        method.invoke(lottoGame, lottos);
 
-        String expectedEarningRatio = "200000000.0";
+        WinningLotto winningLotto = new WinningLotto(lottoNumbers, new BonusNumber(new LottoNumber(7)));
+        lottoGame.calculateRankStatistics(winningLotto);
 
-        // when
+        //when
         String earningRatio = lottoGame.calculateEarningRatio();
 
         // then
-        assertThat(earningRatio).isEqualTo(expectedEarningRatio);
+        assertThat(earningRatio).isEqualTo("200000000.0");
     }
 
     @Test
@@ -53,9 +45,35 @@ public void should_success_when_input_money_return_lotto_as_much_as_input_money(
         LottoGame lottoGame = new LottoGame();
 
         // when
-        int lottoCount = lottoGame.inputMoney(money);
+        int lottoCount = lottoGame.calculateLottoCount(money);
 
         // then
         assertThat(lottoCount).isEqualTo(expectedLottoCount);
     }
+
+    @Test
+    @DisplayName("구입 장수만큼 로또 티켓에 로또가 추가된다면 성공이다.")
+    public void should_success_when_lotto_ticket_can_add_lottos_as_much_as_money() {
+        // given
+        int manualLottoCount = 1;
+
+        LottoGame lottoGame = new LottoGame();
+        int lottoCount = lottoGame.calculateLottoCount(3000);
+
+        List<LottoNumber> lottoNumbers = new ArrayList<>();
+        for (int i = 1; i < 7; i++) {
+            lottoNumbers.add(new LottoNumber(i));
+        }
+
+        List<Lotto> manualLotto = new ArrayList<>();
+        for (int i = 0; i < manualLottoCount; i++) {
+            manualLotto.add(new Lotto(lottoNumbers));
+        }
+
+        // when
+        LottoTicket lottoTicket = lottoGame.generateLottoTicket(manualLottoCount);
+
+        // then
+        assertThat(lottoTicket.getLottoTicket().size()).isEqualTo(lottoCount);
+    }
 }
\ No newline at end of file

리뷰: 결과값과 비교하는 값을 lottoCount가 아닌 직접적인 숫자로 비교하면 어떨까요? 만약 실수로 lottoGame.inputMoney()에서 입력받은 돈을 반올림해서 장수를 출력하도록 해버렸다면 티켓의 사이즈가 4더라도 테스트가 통과하게 될 것 같습니다. 사실 지금 테스트 코드는 `lottoGame.inputMoney()`가 먼저 보장되어야하는만 정확한 테스트가 가능한 코드라고 볼 수 있을 것 같습니다. 테스트를 하다보면 어쩔 수 없는 부분일 수도 있고, 제 말이 정답은 아니지만 결과값은 가급적 더 정확한 것에 의존해야하지 않을까 생각이 들어 리뷰 남겨봤습니다.