Skip to content

zest-sw/java-racingcar-simple-playground

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

2주차: 자동차 경주 - 초간단 어플리케이션

1단계

  • 자동차는 이름을 가지고 있다.
  • 자동차는 움직일 수 있다.
  • 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
  • 테스트 함수를 만든다.

2단계

  • n대의 자동차가 참여할 수 있다.
  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다.
  • 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다.

3단계

  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
  • 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
  • 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
  • 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
  • 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
  • 메인 메서드를 추가하여 실행 가능한 애플리케이션으로 만든다.

4단계

  • 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외한다.
  • 랜덤한 요소가 존재하는 코드는 어떻게 테스트할 수 있는지 경험한다.

1차 리뷰 반영

  • 불필요한 패키지 구조 제거
  • 사용하지 않는 기능 제거
  • Car 관련 검증 로직은 Car 안에서만 처리하기
  • 출력 관련 기능 분리

2차 리뷰 반영

  • 엔트리 포인트 정의
  • car static 제거
  • 랜덤 값 contest에서 받아서 차량 움직이는 방식으로 리팩토링
  • 확률적 테스트 제거
  • view 영역 domain 의존도 분리

고민한 부분

  • 랜덤 인풋을 이용하는 부분에서는 어떻게 테스트를 해야할 것인가
    • 확률적으로 접근에 여러 번 테스트한 다음 오차 범위 안에 들어가는지 테스트
    • 랜덤값 발생과 객체의 작동을 분리해서 지정 인풋에 대한 테스트를 가능하게 설계, 랜덤값 발생에 대한 의존도 분리(랜덤값 발생은 java.util.Random로 격리)
  • 테스트를 위해서 제어접근자를 여는 것이 맞는 것일까? -> 실제 사용성 본질하고 안 맞음
  • private 함수를 테스트하려면 어떻게 해야 하는가

About

초록 스터디 자바 기초 과정 자동차 경주 미션을 위한 저장소

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%