Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
847d270
test StringTest μΆ”κ°€
JiEung2 Mar 11, 2025
8340cbe
test SetTest μΆ”κ°€
JiEung2 Mar 11, 2025
302a0c5
docs todo list μΆ”κ°€
JiEung2 Mar 16, 2025
ee5f170
test 숫자 ν•˜λ‚˜λ₯Ό μž…λ ₯λ°›μ•˜μ„ 경우 ν•΄λ‹Ή 숫자λ₯Ό λ°˜ν™˜ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
fd23e9d
feat λ¬Έμžμ—΄ 숫자 ν•˜λ‚˜λ₯Ό μž…λ ₯으둜 λ°›μ•„ 숫자둜 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
885e2f8
test 숫자 두 개λ₯Ό 컴마 κ΅¬λΆ„μžλ‘œ μž…λ ₯ν•  경우 두 숫자의 ν•©μœΌ λ°˜ν™˜ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ ν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
35c023d
feat 숫자 두 개λ₯Ό 컴마 κ΅¬λΆ„μžλ‘œ κ΅¬λΆ„ν•˜μ—¬ 숫자의 합을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
1331fd7
test 숫자λ₯Ό 콜둠 κ΅¬λΆ„μžλ‘œ κ΅¬λΆ„ν•˜μ—¬ 숫자의 합을 λ°˜ν™˜ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
c4de5e8
feat 숫자λ₯Ό 콜둠 κ΅¬λΆ„μžλ‘œ κ΅¬λΆ„ν•˜μ—¬ 숫자의 합을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
77978a0
test μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ κ΅¬λΆ„ν•œ ν›„ μˆ«μžλ“€μ˜ 합을 λ°˜ν™˜ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
c35e4b9
feat μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ 숫자λ₯Ό κ΅¬λΆ„ν•˜λŠ” λ©”μ„œλ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
4828376
test 빈 λ¬Έμžμ—΄μ΄λ‚˜ null 값을 μž…λ ₯ν•  경우 0을 λ°˜ν™˜ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
6b7846d
feat 빈 λ¬Έμžμ—΄μ΄λ‚˜ null 값을 μž…λ ₯ν•  경우 0을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
5e99bc7
refactor 합을 κ΅¬ν•˜λŠ” κΈ°λŠ₯ 뢄리
JiEung2 Mar 16, 2025
75e1f90
test 음수 값을 μž…λ ₯ν•  경우 RuntimeException μ˜ˆμ™Έκ°€ λ°œμƒν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
f096b98
feat μŒμˆ˜κ°€ μ „λ‹¬λ˜μ—ˆλŠ”μ§€ κ²€μ¦ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 16, 2025
fbf729e
docs todo μ—…λ°μ΄νŠΈ
JiEung2 Mar 16, 2025
cef0314
test 곡백 λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•˜μ„ λ•Œ 0을 λ°˜ν™˜ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ ν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 16, 2025
c166437
refactor λ©”μ„œλ“œ λ¦¬νŒ©ν† λ§
JiEung2 Mar 16, 2025
6a7c40e
docs todo step2둜 이름 λ³€κ²½
JiEung2 Mar 17, 2025
829580b
docs step3 κΈ°λŠ₯ λͺ©λ‘ μΆ”κ°€
JiEung2 Mar 17, 2025
76070dd
test step1 ν…ŒμŠ€νŠΈ 이동
JiEung2 Mar 17, 2025
b5a30cd
test μžλ™μ°¨ μ „μ§„ ν…ŒμŠ€νŠΈ μΆ”κ°€
JiEung2 Mar 17, 2025
1af10b4
feat μžλ™μ°¨κ°€ μ „μ§„ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 17, 2025
45cb60a
test μˆ«μžκ°€ 4이상인지 νŒλ³„ν•˜λŠ” κΈ°λŠ₯을 ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 17, 2025
b9a1265
feat 인자둜 받은 μˆ«μžκ°€ κΈ°μ€€ 숫자인 4이상인지 νŒλ³„ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 17, 2025
e6ee71c
feat μžλ™μ°¨μ˜ λŒ€μˆ˜λ₯Ό μž…λ ₯λ°›λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 17, 2025
e1ac418
docs μžλ™μ°¨λ₯Ό μƒμ„±ν•˜λŠ” κΈ°λŠ₯ λͺ©λ‘μ— μΆ”κ°€
JiEung2 Mar 17, 2025
7d08731
feat μ‹œλ„ν•  횟수λ₯Ό μž…λ ₯λ°›λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 17, 2025
21ca3be
feat random 값을 μƒμ„±ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 17, 2025
212ee73
refactor λͺ¨λ“  객체가 BASE_NUMBERλ₯Ό κ³΅μœ ν•˜κΈ° μœ„ν•΄ static μ„ μ–Έ μΆ”κ°€
JiEung2 Mar 17, 2025
d5c0862
feat μžλ™μ°¨ λŒ€μˆ˜λ§ŒνΌ μžλ™μ°¨λ₯Ό μƒμ„±ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 17, 2025
014af59
test μžλ™μ°¨κ°€ 전달받은 μˆ«μžμ— 따라 μ „μ§„ν•˜κ³  μ •μ§€ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
Mar 18, 2025
03b6f2a
feat μžλ™μ°¨κ°€ 전달받은 μˆ«μžμ— 따라 μ „μ§„ν•˜κ³  μ •μ§€ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
Mar 18, 2025
62b7996
feat μžλ™μ°¨ μœ„μΉ˜ μƒνƒœλ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
Mar 18, 2025
595670d
feat 전체 μžλ™μ°¨ 레이슀λ₯Ό μ‹œμž‘ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
Mar 18, 2025
b50fd86
docs μžλ™μ°¨ μœ„μΉ˜ μƒνƒœλ₯Ό 화면에 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ μ™„λ£Œ 처리
Mar 18, 2025
5c2b938
test 숫자 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ ν…ŒμŠ€νŠΈ λ³€κ²½
JiEung2 Mar 19, 2025
1404be9
feat NumberGenerator μΆ”κ°€
JiEung2 Mar 19, 2025
20d4b33
feat κ³ μ • 숫자λ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•œ 클래슀 μΆ”κ°€
JiEung2 Mar 19, 2025
d8009f1
fix RandomNumberGenerator에 NumberGeneratorλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ μˆ˜μ •
JiEung2 Mar 19, 2025
05b0670
fix moveμ—μ„œ int 값이 μ•„λ‹Œ NumberGeneratorλ₯Ό μ£Όμž…λ°›λ„λ‘ λ³€κ²½
JiEung2 Mar 19, 2025
8ffe40c
feat Cars 생성
JiEung2 Mar 19, 2025
eee0897
docs step4 κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­ μΆ”κ°€
JiEung2 Mar 19, 2025
bf0b47b
test μžλ™μ°¨μ— 이름을 λΆ€μ—¬ν•˜κΈ° μœ„ν•΄ ν…ŒμŠ€νŠΈ μˆ˜μ •
JiEung2 Mar 19, 2025
b301e51
feat Car ν΄λž˜μŠ€μ— 이름 ν•„λ“œ μΆ”κ°€ 및 μƒμ„±μž μΆ”κ°€
JiEung2 Mar 19, 2025
f29f066
fix CarGenerator에 인자둜 countκ°€ μ•„λ‹Œ carNamesλ₯Ό 받도둝 μˆ˜μ •
JiEung2 Mar 19, 2025
c051058
fix inputCarCountμ—μ„œ inputCarNames둜 λ³€κ²½
JiEung2 Mar 19, 2025
2167869
fix carName이 좔가됨에 λ”°λ₯Έ play λ©”μ„œλ“œ μˆ˜μ •
JiEung2 Mar 19, 2025
1a91306
feat Car name이 5자λ₯Ό μ΄ˆκ³Όν•˜λŠ”μ§€ κ²€μ‚¬ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 19, 2025
0ba008a
test Car name이 5자λ₯Ό μ΄ˆκ³Όν–ˆμ„ λ•Œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λŠ” μ½”λ“œ μΆ”κ°€
JiEung2 Mar 19, 2025
04d6ef2
feat μ „μ§„ν•˜λŠ” μžλ™μ°¨λ₯Ό 좜λ ₯ν•  λ•Œ μžλ™μ°¨ 이름도 좜λ ₯ν•˜λ„λ‘ μˆ˜μ •
JiEung2 Mar 19, 2025
2ad32e7
test 우승자 νŒλ³„ ν…ŒμŠ€νŠΈ μΆ”κ°€
JiEung2 Mar 19, 2025
2dd7dca
feat 우승자λ₯Ό νŒλ³„ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 19, 2025
9dcc6ec
feat 우승자λ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ μΆ”κ°€
JiEung2 Mar 19, 2025
4c0e4d6
refactor CarGenerator에 있던 generateCars κΈ°λŠ₯ Cars둜 이동
Mar 21, 2025
19e58df
refactor ν…ŒμŠ€νŠΈλ₯Ό μ‰½κ²Œ ν•˜κΈ° μœ„ν•œ μƒμ„±μž μΆ”κ°€
Mar 21, 2025
77e6957
refactor 클래슀 λ‚΄ μ •μ˜ μˆœμ„œ μˆ˜μ •
JiEung2 Mar 23, 2025
41df7c0
test 포μž₯μ‹œν‚¨ Position 생성 ν…ŒμŠ€νŠΈ μΆ”κ°€
JiEung2 Mar 23, 2025
fb3389f
refactor position을 포μž₯
JiEung2 Mar 23, 2025
6d43c59
Merge branch 'jieung2' into step4
JiEung2 Mar 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions docs/step4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­
- 각 μžλ™μ°¨μ— 이름을 λΆ€μ—¬ν•  수 μžˆλ‹€. μžλ™μ°¨ 이름은 5자λ₯Ό μ΄ˆκ³Όν•  수 μ—†λ‹€.
- μ „μ§„ν•˜λŠ” μžλ™μ°¨λ₯Ό 좜λ ₯ν•  λ•Œ μžλ™μ°¨ 이름을 같이 좜λ ₯ν•œλ‹€.
- μžλ™μ°¨ 이름은 μ‰Όν‘œ(,)λ₯Ό κΈ°μ€€μœΌλ‘œ κ΅¬λΆ„ν•œλ‹€.
- μžλ™μ°¨ κ²½μ£Ό κ²Œμž„μ„ μ™„λ£Œν•œ ν›„ λˆ„κ°€ μš°μŠΉν–ˆλŠ”μ§€λ₯Ό μ•Œλ €μ€€λ‹€. μš°μŠΉμžλŠ” ν•œ λͺ… 이상일 수 μžˆλ‹€.

## κΈ°λŠ₯ λͺ©λ‘
- [x] μžλ™μ°¨μ— 이름을 λΆ€μ—¬ν•œλ‹€.
- [x] μžλ™μ°¨ 이름이 5자λ₯Ό μ΄ˆκ³Όν•˜λŠ”μ§€ κ²€μ‚¬ν•œλ‹€.
- [x] μ „μ§„ν•˜λŠ” μžλ™μ°¨λ₯Ό 좜λ ₯ν•  λ•Œ μžλ™μ°¨ 이름을 같이 좜λ ₯ν•œλ‹€.
- [x] μžλ™μ°¨ 이름을 μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•œλ‹€.
- [x] μžλ™μ°¨ κ²½μ£Ό κ²Œμž„ 우승자λ₯Ό νŒλ³„ν•œλ‹€.
- [x] μžλ™μ°¨ κ²½μ£Ό κ²Œμž„ 우승자λ₯Ό 좜λ ₯ν•œλ‹€.
11 changes: 6 additions & 5 deletions src/main/java/RacingCar.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import car.Car;
import car.Cars;
import domain.Cars;
import domain.WinnerDeterminer;
import utils.*;

import java.util.List;
import java.util.stream.IntStream;

public class RacingCar {
Expand All @@ -11,10 +10,10 @@ public static void main(String[] args) {
}

private static void play() {
int carCount = InputView.inputCarCount();
String[] carNames = InputView.inputCarNames();
int tryCount = InputView.inputTryCount();

Cars cars = new Cars(CarGenerator.generateCars(carCount));
Cars cars = new Cars(Cars.generateCars(carNames));

OutputView.displayResultMessage();
NumberGenerator numberGenerator = new RandomNumberGenerator();
Expand All @@ -23,5 +22,7 @@ private static void play() {
cars.moveAll(numberGenerator);
OutputView.displayRoundResult(cars.getCars());
});

OutputView.displayWinners(WinnerDeterminer.findWinners(cars));
}
}
53 changes: 53 additions & 0 deletions src/main/java/domain/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package domain;

import utils.NumberGenerator;

public class Car {
private final static int BASE_NUMBER = 4;
private final static int MAX_NAME_LENGTH = 5;
private final String name;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Name도 ν•œλ²ˆ μ›μ‹œκ°’ 포μž₯을 ν•΄λ³΄μ‹œλ©΄ μ–΄λ–¨κΉŒμš”?

private final Position position;

public Car(String name) {
this(name, 0);
}

public Car(String name, int position) {
validateName(name);
this.name = name;
this.position = new Position(position);
}

public void move(NumberGenerator numberGenerator) {
int movableNumber = numberGenerator.generate();
if (isAtLeastBaseNumber(movableNumber)) {
goForward();
}
}

private void goForward() {
this.position.increase();
}

public int getPosition() {
return this.position.getValue();
}

public String getName() {
return this.name;
}

private boolean isAtLeastBaseNumber(int number) {
return BASE_NUMBER <= number;
}

private void validateName(String name) {
if (exceedsMaxNameLength(name)) {
throw new IllegalArgumentException("μžλ™μ°¨ 이름은 5자 μ΄ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.");
}
}

private boolean exceedsMaxNameLength(String name) {
return name.length() > MAX_NAME_LENGTH;
}
}
37 changes: 37 additions & 0 deletions src/main/java/domain/Cars.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package domain;

import utils.NumberGenerator;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Cars {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ΄λŸ¬ν•œ 고민을 해봐도 쒋을거 κ°™μ•„μš”.

μš°μŠΉμžλΌλŠ”κ²ƒμ€ 어디에 μ‘΄μž¬ν• κΉŒμš”?

Cars λ‚΄μ—μ„œ μš°μŠΉμžκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„κΉŒμš”?

Carsκ°€ 우승자λ₯Ό returnν•˜λŠ”κ²Œ μ–΄μšΈλ¦¬μ§€ μ•Šμ„κΉŒμš”?

List<Car> cars = new ArrayList<>();

public Cars(List<Car> cars) {
this.cars = cars;
}

public static List<Car> generateCars(String[] carNames) {
return Arrays.stream(carNames)
.map(Car::new)
.collect(Collectors.toList());
}

public void moveAll(NumberGenerator numberGenerator) {
cars.forEach(car -> car.move(numberGenerator));
}

public List<Integer> getPositions() {
return cars.stream()
.map(Car::getPosition)
.collect(Collectors.toList());
}

public List<Car> getCars() {
return List.copyOf(cars);
}

}
17 changes: 17 additions & 0 deletions src/main/java/domain/Position.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package domain;

public class Position {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

position은 0 미만의 값이 될수 μžˆμ„κΉŒμš”?

private int value;

public Position(int value) {
this.value = value;
}

public int getValue() {
return this.value;
}

public void increase() {
this.value++;
}
}
21 changes: 21 additions & 0 deletions src/main/java/domain/WinnerDeterminer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package domain;

import java.util.List;
import java.util.stream.Collectors;

public class WinnerDeterminer {

public static List<Car> findWinners(Cars cars) {
int maxPosition = findMaxPosition(cars);
return cars.getCars().stream()
.filter(car -> car.getPosition() == maxPosition)
.collect(Collectors.toList());
}

private static int findMaxPosition(Cars cars) {
return cars.getCars().stream()
.mapToInt(Car::getPosition)
.max()
.orElse(0);
}
}
12 changes: 8 additions & 4 deletions src/main/java/utils/InputView.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
import java.util.Scanner;

public class InputView {
private static final String INPUT_CAR_COUNT_MESSAGE = "μžλ™μ°¨ λŒ€μˆ˜λŠ” λͺ‡ λŒ€ μΈκ°€μš”?";
private static final String INPUT_CAR_NAMES_MESSAGE = "κ²½μ£Όν•  μžλ™μ°¨ 이름을 μž…λ ₯ν•˜μ„Έμš”(이름은 μ‰Όν‘œ(,)λ₯Ό κΈ°μ€€μœΌλ‘œ ꡬ뢄).";
private static final String INPUT_TRY_COUNT_MESSAGE = "μ‹œλ„ν•  νšŸμˆ˜λŠ” λͺ‡ 회 μΈκ°€μš”?";
private static final Scanner scanner = new Scanner(System.in);

public static int inputCarCount() {
println(INPUT_CAR_COUNT_MESSAGE);
return toInt(inputNextLine());
public static String[] inputCarNames() {
println(INPUT_CAR_NAMES_MESSAGE);
return splitCarNames(inputNextLine());
}

public static int inputTryCount() {
Expand All @@ -25,6 +25,10 @@ private static int toInt(String number) {
return Integer.parseInt(number);
}

private static String[] splitCarNames(String inputNames) {
return inputNames.split(",");
}

private static void println(String message) {
System.out.println(message);
}
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/utils/OutputView.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,34 @@
package utils;

import car.Car;
import domain.Car;

import java.util.List;
import java.util.stream.Collectors;

public class OutputView {
private static final String CAR_POSITION_MARK = "-";
private static final String RESULT_MESSAGE = "μ‹€ν–‰ κ²°κ³Ό";
private static final String COLON = " : ";
private static final String WINNER_MESSAGE = "κ°€ μ΅œμ’… μš°μŠΉν–ˆμŠ΅λ‹ˆλ‹€.";

public static void displayRoundResult(List<Car> cars) {
cars.forEach(car -> printCarPosition(car.getPosition()));
cars.forEach(car -> printCarPosition(car.getName(), car.getPosition()));
println();
}

public static void displayResultMessage() {
println(RESULT_MESSAGE);
}

private static void printCarPosition(int count) {
println(CAR_POSITION_MARK.repeat(count));
public static void displayWinners(List<Car> winners) {
String winnerNames = winners.stream()
.map(Car::getName)
.collect(Collectors.joining(", "));
println(winnerNames + WINNER_MESSAGE);
}

private static void printCarPosition(String carName, int count) {
println(carName + COLON + CAR_POSITION_MARK.repeat(count));
}

private static void println(String string) {
Expand Down
35 changes: 35 additions & 0 deletions src/test/java/domain/CarTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package domain;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import utils.FixedNumberGenerator;

import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;

public class CarTest {
@Test
@DisplayName("μˆ«μžκ°€ 4 이상일 λ•Œ μžλ™μ°¨κ°€ μ „μ§„ν•œλ‹€.")
void μžλ™μ°¨_μ „μ§„() {
Car car = new Car("pobi");
car.move(new FixedNumberGenerator(4));
assertThat(car.getPosition()).isEqualTo(1);
}

@Test
@DisplayName("μˆ«μžκ°€ 4 미만일 λ•Œ μžλ™μ°¨κ°€ μ •μ§€ν•œλ‹€.")
void μžλ™μ°¨_μ •μ§€() {
Car car = new Car("pobi");
car.move(new FixedNumberGenerator(1));
assertThat(car.getPosition()).isEqualTo(0);
}

@Test
@DisplayName("μžλ™μ°¨ 이름이 5μžκ°€ λ„˜μœΌλ©΄ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.")
void μžλ™μ°¨_이름_초과() {
assertThrows(IllegalArgumentException.class, () -> {
new Car("pobijjang");
});
}

}
14 changes: 14 additions & 0 deletions src/test/java/domain/PositionTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package domain;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class PositionTest {
@Test
@DisplayName("value κ°’κ³Ό ν•¨κ»˜ position을 μƒμ„±ν•˜λ©΄ position의 값이 4둜 μ„€μ •λœλ‹€.")
void create() {
Position position = new Position(4);
Assertions.assertThat(position.getValue()).isEqualTo(4);
}
}
41 changes: 41 additions & 0 deletions src/test/java/domain/WinnerDeterminerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package domain;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import utils.FixedNumberGenerator;
import utils.NumberGenerator;

import java.util.List;


class WinnerDeterminerTest {

@Test
@DisplayName("단독 μš°μŠΉμžκ°€ μ •μƒμ μœΌλ‘œ νŒλ³„λ˜μ–΄μ•Ό ν•œλ‹€")
void 우승자_νŒλ³„() {
Car car1 = new Car("pobi", 4);
Car car2 = new Car("crong", 3);
Car car3 = new Car("honux", 2);

Cars cars = new Cars(List.of(car1, car2, car3));

Assertions.assertThat(WinnerDeterminer.findWinners(cars)).isEqualTo(List.of(car1));
}

@Test
@DisplayName("곡동 μš°μŠΉμžκ°€ μžˆμ„ 경우, λͺ¨λ‘ 우승자둜 νŒλ³„λ˜μ–΄μ•Ό ν•œλ‹€")
void 곡동_우승자_νŒλ³„() {
Car car1 = new Car("pobi");
Car car2 = new Car("crong");
Car car3 = new Car("honux");

Cars cars = new Cars(List.of(car1, car2, car3));

NumberGenerator fixedNumberGenerator = new FixedNumberGenerator(4);
car1.move(fixedNumberGenerator);
car2.move(fixedNumberGenerator);

Assertions.assertThat(WinnerDeterminer.findWinners(cars)).isEqualTo(List.of(car1, car2));
}
}