테스트 주도 개발

참고: 책 “테스트 주도 개발 시작하기 - 최범균 저”


Test Code

JUnit

한 번에 메소드 하나에만 집중

결과 값을 눈이 아닌 프로그램을 통해 자동화

assertEquals() 메소드 제공

테스트 코드 중복 제거

참고: https://gmlwjd9405.github.io/2019/11/27/junit5-guide-parameterized-test.html

@ParameterizedTest

@ValueSource

@ParameterizedTest
@DisplayName("5자 이하의 이름을 가진 자동차 생성 테스트")
@ValueSource(strings = {"pobi", "crong", "honux"})
void createCarWithName(String name) {
    car = new Car (name);
    assertThat(car.getName()).isEqualTo(name);
}

@MethodSource

static Stream<Arguments> distances() {
    return Stream.of(
            Arguments.of(new MoveStrategy[]{() -> false, () -> false, () -> false}, new Car(carName, 0)),
            Arguments.of(new MoveStrategy[]{() -> true, () -> true, () -> true}, new Car(carName, 3)),
            Arguments.of(new MoveStrategy[]{() -> true, () -> false, () -> true}, new Car(carName, 2))
    );
}

@ParameterizedTest
@DisplayName("이동거리 확인 테스트")
@MethodSource("**distances**")
void checkPosition(MoveStrategy[] positions, Car expected) {
    for (MoveStrategy moveStrategy : positions) {
        car = car.move(moveStrategy);
    }
    assertEquals(expected, car);
}