@Test publicvoid 자동차_이름_글자수_테스트() { assertThatThrownBy(() -> new CarName("다섯글자이상")) .isInstanceOf(RuntimeException.class) .hasMessageContaining("자동차 이름은 5자 이하여야 합니다."); }
@Test publicvoid 자동차_이름이_존재하지_않는_경우_테스트() { assertThatThrownBy(() -> new CarName("")) .isInstanceOf(RuntimeException.class) .hasMessageContaining("모든 자동차 이름은 반드시 존재해야 합니다."); } // 등등... }
privatestatic Stream<Arguments> provideCarNameAndExceptionMessage(){ return Stream.of( Arguments.of(null, "자동차 이름을 찾을 수 없습니다!"), Arguments.of("다섯글자이상", "자동차 이름은 5자 이하여야 합니다."), Arguments.of("", "모든 자동차 이름은 반드시 존재해야 합니다."), Arguments.of(" ", "자동차 이름은 공백으로 설정할 수 없습니다."), Arguments.of(" ", "자동차 이름은 공백으로 설정할 수 없습니다.") ); }
@ParameterizedTest의 name 필드에 {매개변수인덱스}를 넘겨주면 해당 인자가 테스트 이름에 포함된다.
{매개변수 인덱스} 말고도 다양한 템플릿을 사용할 수 있다. {displayName} : 테스트 메서드 이름 {arguments} : 모든 인자를 쉼표로 구분해서 모두 표현 {argumentsWithNames} : 모든 인자를 이름과 함께 보여줌.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@ParameterizedTest(name = "{0} vs {1} is {2}") @CsvSource(value = {"BLACKJACK,BUST,WIN", "BLACKJACK,STAND,WIN", "STAND,BUST,WIN", "BLACKJACK,BLACKJACK,DRAW", "STAND,STAND,DRAW", "BUST,BUST,DRAW", "BUST,STAND,LOSE", "STAND,BLACKJACK,LOSE", }) voidgetResultFromStatus(Status status1, Status status2, Result expected){ Result actual = Result.of(status1, status2);