Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
3755dff
refactor(step3): 코드리뷰 반영
LeeJin0527 Mar 19, 2025
66a7abf
refactor(step3): 코드리뷰 반영
LeeJin0527 Mar 20, 2025
897b852
feat(step4): 자동차 이름 입력 값 검증 추가
LeeJin0527 Mar 20, 2025
de6c4b8
feat(step4): 자동차 객체 생성 시 이름 로직 추가
LeeJin0527 Mar 20, 2025
d0bacbd
feat(step4): 경주 진행 시 매 회차 자동차들의 위치 출력 기능 구현
LeeJin0527 Mar 20, 2025
c535ddf
feat(step4): 최종 우승자 출력기능 구현
LeeJin0527 Mar 20, 2025
5b22668
docs(step4): 기능 요구사항 md 완료 항목 체크
LeeJin0527 Mar 20, 2025
06dbad0
refactor(step4) : final 추가
LeeJin0527 Mar 26, 2025
75f3c15
refactor(step4) : 자동차명 원시 값 포장 & 테스트코드 작성
LeeJin0527 Mar 26, 2025
df07b2f
refactor(step4) : 부 생성자를 주 생성자를 호출하도록 수정
LeeJin0527 Mar 26, 2025
b5e3e93
refactor(step4) : 출력과 관련된 상수 OutputView로 이동
LeeJin0527 Mar 26, 2025
d8def67
test(step4) : 객체 값 비교 테스트 추가
LeeJin0527 Mar 26, 2025
7c551d1
test(step4) : PositionTest 위치 기반으로 수정
LeeJin0527 Mar 26, 2025
722e61c
test(step4) : 우승자 출력 테스트 추가
LeeJin0527 Mar 26, 2025
53ec369
test(step4) : 차량 이름 객체 테스트 코드 수정
LeeJin0527 Mar 27, 2025
ddb7075
test(step4) : 차량 이름 테스트 경계값 테스트 추가
LeeJin0527 Mar 27, 2025
928e4f5
refactor(step4): 디미터 법칙 적용
LeeJin0527 Mar 27, 2025
1fc9929
Merge branch 'leejin0527' into feature-racinggame
LeeJin0527 Mar 27, 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
2 changes: 1 addition & 1 deletion src/main/java/racingcar/message/ErrorMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ public class ErrorMessage {
public static final String INVALID_NUMBER = "숫자를 입력해야 합니다.";
public static final String POSITIVE_NUMBER = "양수를 입력해야 합니다.";
public static final String INVALID_NAME = "닉네임은 1자 이상 5자 이하여야 합니다. 다시 입력해주세요.";
public static final String INVALID_CAR_NAME_LENGTH = "자동차 이름은 5자 이하만 가능합니다.";
public static final String INVALID_CAR_NAME_LENGTH = "자동차 이름은 1자 이상 5자 이하만 가능합니다.";

private ErrorMessage() {
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/racingcar/model/Car.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ private boolean canMove(int randomValue) {
return randomValue >= MOVE_CONDITION_NUMBER;
}

public boolean matches(CarName carName) {
return this.name.equals(carName);
}

public boolean isAtPosition(Position other) {
return position.isSameAs(other);
}
Expand Down
9 changes: 2 additions & 7 deletions src/main/java/racingcar/model/CarName.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package racingcar.model;

import static racingcar.message.ErrorMessage.INVALID_CAR_NAME_LENGTH;
import static racingcar.message.ErrorMessage.INVALID_NAME;

public class CarName {

Expand All @@ -16,18 +15,14 @@ public CarName(String value) {

private void validate(String value) {
if (value == null || value.isBlank()) {
throw new IllegalArgumentException(INVALID_NAME);
throw new IllegalArgumentException(INVALID_CAR_NAME_LENGTH);
}

if (value.length() > MAXIMUM_NAME_LENGTH) {
throw new IllegalArgumentException(INVALID_CAR_NAME_LENGTH);
}
}

public String getName() {
return name;
}


@Override
public String toString() {
return name;
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/racingcar/view/OutputView.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package racingcar.view;

import racingcar.model.Car;
import racingcar.model.CarName;

import java.util.List;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -29,7 +30,8 @@ public static void printWinners(List<Car> winners) {

private static String formatWinnersName(List<Car> winners) {
return winners.stream()
.map(car -> car.getName().getName())
.map(Car::getName)
.map(CarName::toString)
.collect(Collectors.joining(WINNER_NAME_SEPERATOR));
}
}
21 changes: 15 additions & 6 deletions src/test/java/racingcar/model/CarNameTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,36 @@
import racingcar.message.ErrorMessage;

class CarNameTest {

@DisplayName("자동차명은 1자에서 5자 이하이다.")
@DisplayName("자동차명은 1자에서 5자 이하이면 예외가 발생하지 않는다.")
@ParameterizedTest
@ValueSource(strings = {"a", "ab", "abc", "abcd", "abcde"})
void valid_car_name(String carName) {
assertThatCode(() -> new Car(new CarName(carName)))
assertThatCode(() -> new CarName(carName))
.doesNotThrowAnyException();
}

@DisplayName("자동차명이 0자 이하 6자 이상이면 예외가 발생한다.")
@ParameterizedTest
@ValueSource(strings = {"", "abcdef", "abddklajgkljgaskfjaklsjfksjf"})
void invalid_car_name(String carName) {
assertThatThrownBy(() -> new CarName(carName))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(ErrorMessage.INVALID_CAR_NAME_LENGTH);
}

@DisplayName("자동차명이 null이면 exception을 발생시킨다.")
@Test
void car_name_with_blank() {
assertThatThrownBy(() -> new Car(new CarName("")))
assertThatThrownBy(() -> new CarName(""))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(ErrorMessage.INVALID_NAME);
.hasMessage(ErrorMessage.INVALID_CAR_NAME_LENGTH);
}

@DisplayName("자동차명이 5자를 초과하면 exception을 발생시킨다.")
@Test
void car_name_exceed_max_length() {
assertThatThrownBy(() -> new Car(new CarName("abcdef")))
assertThatThrownBy(() -> new CarName("abcdef"))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(ErrorMessage.INVALID_CAR_NAME_LENGTH);
}
Expand Down
12 changes: 4 additions & 8 deletions src/test/java/racingcar/model/CarTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ class CarTest {
void car_creation_test() {
Car car = new Car(new CarName("test"), new Position(5));

assertThat(car.getName().getName()).isEqualTo("test");
assertThat(car.isAtPosition(new Position(5))).isTrue();
assertThat(car.matches(new CarName("test"))).isTrue();
}

@Test
Expand All @@ -34,8 +33,7 @@ void car_initialPosition_test(int initialPosition) {

Car car = new Car(new CarName(carName), new Position(initialPosition));

assertThat(car.getName().getName()).isEqualTo(carName);
assertThat(car.isAtPosition(new Position(initialPosition))).isTrue();
assertThat(car.matches(new CarName(carName))).isTrue();
}

@DisplayName("랜덤 값이 4이상 이면 이동 한다.")
Expand All @@ -54,9 +52,7 @@ void car_move_logic_test(int initialPosition, int randomValue, int expectedPosit

Car movedCar = initialCar.move(randomValue);

assertThat(movedCar.getName().getName()).isEqualTo(carName);
assertThat(movedCar.isAtPosition(new Position(expectedPosition))).isTrue();
assertThat(initialCar).isNotEqualTo(movedCar);
assertThat(movedCar.matches(new CarName("car"))).isTrue();
}

@DisplayName("랜덤 값이 3이하 이면 이동 하지 않는다.")
Expand All @@ -73,7 +69,7 @@ void car_not_move_logic_test(int initialPosition, int randomValue, int expectedP

Car movedCar = initialCar.move(randomValue);

assertThat(movedCar.getName().getName()).isEqualTo(carName);
assertThat(movedCar.matches(new CarName(carName))).isTrue();
assertThat(movedCar.isAtPosition(new Position(expectedPosition))).isTrue();
}

Expand Down