public void drive() { Random random = new Random(); int number = random.nextInt(10); if (number >= 4) { position += 1; } } 자동차는 랜덤한 숫자를 하나 선택하고, 이가 4 이상이면 전진한다. 자동차의 전진 여부를 테스트하기 위해선 어떻게 해야할까? @DisplayName("자동차 전진 테스트") @Test void driveTest() { Car car = new Car("test"); car.drive(); assertThat(car.getPosition()).isEqualTo(1); } 이렇게 테스트하면.. 0~3이면 실패고, 4~9면 성공이니 60% 확률로 성공한다. 그러면 이를 @RepeatedTest..
프리코스때는 다음과 같이 InputView에서 도메인을 생성해 return해주었다. // InputView.java public List readCoaches() { List coachNames = readWordsSeparatedByComma(); validateCoach(coachNames); return convertToCoach(coachNames); } 하지만 View에서 Domain을 생성까지 담당하면, InputView의 책임이 너무 커지는 것 같았다. 따라서 이번 미션에서는 InputView는 문자열 및 원시값을 전달해주는 역할만을 하도록했다. Domain으로 바꿔주는 것은 Controller의 책임이라 생각했다. 다만, “a,b,c”를 List.of(a,b,c); 문자열 파싱해주는 것은 ..
입력값 검증을 InputView에서 진행할까, Domain에서 진행할까? 가장 많이 고민했던 부분이다. 입력값 검증을 input할 때 View에서 해야할지, domain을 생성하는 시점에 해야할지 고민했다. 웹서비스에서의 회원가입 절차에서는 올바르지 않은 입력값(ex. 비밀번호 특수문자 미포함, 10자 이하 등)의 경우 주로 웹프론트엔드에서 검증한다. 중복된 아이디의 경우 주로 백엔드에서 검증한다. 따라서 빈 입력값 및 글자수 제한 등의 조건은 View에서 처리하고, 중복 등과 같은 조건은 Domain에서 처리하는 방법을 생각해봤다. 하지만 페어와 협의 과정에서 해당 미션에서는 “자동차 이름이 중복될 수 없다.”라는 조건이 없기에 중복된 이름에 대해서는 이름 뒤에 구분자 및 식별숫자를 붙여주기로 결정했다..
🤔 상수를 하나의 클래스에 모으는 것이 좋을까? 우테코 프리코스때는 Rules라는 클래스를 만드어, 이곳에 상수를 모아주었다. public class Rules { public static final int START_INCLUSIVE = 1; public static final int END_INCLUSIVE = 45; public static final int NUMBER_LENGTH = 6; public static final int LOTTO_PRICE = 1_000; public static final String MAX_PURCHASE_PRICE = "1,000,000,000"; } 하지만 해당 클래스만 봤을 때, 해당 상수가 정확히 어떤 의미인지 파악하기 어려울 수 있다. 상수도 변수처럼 생..