노션 주소
www.notion.so/JUnit5-parameter-3c97b3d4318741bfb4eabb0f6c1f4eb7
pom.xml에 디펜던시 추가
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.6.2</version> <scope>test</scope> </dependency>
등록 후 메소드 위에 @Test 대신 @ParameterizedTest 등록
Parameter가 1개일 경우
@ValueSource(strings = {"", ""})
@ValueSource(ints= {"", ""})
@ValueSource(boolean= {"", ""})
각자 type에 맞게 적용
Parameter가 2개 이상일 경우
@MethodSource 사용
@MethodSource 사용시 따로 팩토리 메소드를 만들어줘야한다.
private static Stream<Arguments> domainFreeTest() { return Stream.of( Arguments.of(0 , 0 , true), Arguments.of(100 , 0 , false), Arguments.of(0 , 100 , false) ); }
팩토리 메소드와 테스트 메소드의 메소드 이름이 같을경우에
@MethodSource에 따로 팩토리 메소드 이름을 안적어줘도 된다.
하지만 다를 경우엔 @MethodSource에 팩토리 메소드 이름을 적어줘야한다.
Parameter로 Enum을 사용할 경우
- Enum 전체 사용시
@ParameterizedTest @EnumSource(Month.class) // passing all 12 months void getValueForAMonth_IsAlwaysBetweenOneAndTwelve(Month month) { int monthNumber = month.getValue(); assertTrue(monthNumber >= 1 && monthNumber <= 12); }
- 특정 enum의 값만 사용시
@ParameterizedTest @EnumSource( value = Month.class, names = {"APRIL", "JUNE", "SEPTEMBER", "NOVEMBER", "FEBRUARY"}, mode = EnumSource.Mode.EXCLUDE) void exceptFourMonths_OthersAre31DaysLong(Month month) { final boolean isALeapYear = false; assertEquals(31, month.length(isALeapYear)); }
- enum에 조건을 줄 경우
@ParameterizedTest @EnumSource(value = Month.class, names = ".+BER", mode = EnumSource.Mode.MATCH_ANY) void fourMonths_AreEndingWithBer(Month month) { EnumSet<Month> months = EnumSet.of(Month.SEPTEMBER, Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER); assertTrue(months.contains(month)); }
Paramter 에 주입할 소스를 csvfile로 사용할 경우
@ParameterizedTest @CsvFileSource(resources = "/data.csv", numLinesToSkip = 1) void toUpperCase_ShouldGenerateTheExpectedUppercaseValueCSVFile( String input, String expected) { String actualValue = input.toUpperCase(); assertEquals(expected, actualValue); }
- csv파일 내용
input,expected test,TEST tEst,TEST Java,JAVA
- 더 다양한 경우는 하단의 첨부한 출처에서 확인
Enum 부터 출처