- 자동차는 이름을 가지고 있다.
- 자동차는 움직일 수 있다.
- 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
- 테스트 함수를 만든다.
- n대의 자동차가 참여할 수 있다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 구할 수 있다. 우승자는 한 명 이상일 수 있다.
- 우승자를 구하는 기능이 의도대로 동작하는지 테스트한다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
- 메인 메서드를 추가하여 실행 가능한 애플리케이션으로 만든다.
- 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외한다.
- 랜덤한 요소가 존재하는 코드는 어떻게 테스트할 수 있는지 경험한다.
- 불필요한 패키지 구조 제거
- 사용하지 않는 기능 제거
- Car 관련 검증 로직은 Car 안에서만 처리하기
- 출력 관련 기능 분리
- 엔트리 포인트 정의
- car static 제거
- 랜덤 값 contest에서 받아서 차량 움직이는 방식으로 리팩토링
- 확률적 테스트 제거
- view 영역 domain 의존도 분리
- 랜덤 인풋을 이용하는 부분에서는 어떻게 테스트를 해야할 것인가
- 확률적으로 접근에 여러 번 테스트한 다음 오차 범위 안에 들어가는지 테스트
- 랜덤값 발생과 객체의 작동을 분리해서 지정 인풋에 대한 테스트를 가능하게 설계, 랜덤값 발생에 대한 의존도 분리(랜덤값 발생은 java.util.Random로 격리)
- 테스트를 위해서 제어접근자를 여는 것이 맞는 것일까? -> 실제 사용성 본질하고 안 맞음
- private 함수를 테스트하려면 어떻게 해야 하는가