2017-10-12 9 views
0

세 개의 매개 변수, 즉 string, stringlist<string>을 사용하여 JUnit5 테스트를 매개 변수화하려고합니다.JUnit5의 매개 변수화 된 테스트 매개 변수로 목록을 전달하는 방법은 무엇입니까?

지금까지

운이 내 사용 사례에 대한 PARAMS를 전달하는 가장 편리한 방법입니다 @CsvSource 사용 :

없음 암시 적 변환 타입 자바에 java.lang.String 타입의 개체를 변환 할 수 있습니다. util.List

실제 테스트는 다음과 같습니다

@ParameterizedTest() 
@CsvSource(
    "2,1" 
) 
fun shouldGetDataBit(first: Int, second: String, third: List<String>) { 
    ... 
} 

이 가능하다면 어떤 생각? 여기에 Kotlin을 사용하고 있지만 관련이 없어야합니다.

답변

3

StefanE의 제안대로 해킹을 사용할 이유가 없습니다.

이 시점에서 Junit5 Test Parameters는 기본 유형과 CsvSource 이외의 다른 유형을 지원하지 않으므로 유형을 혼합 할 수 있습니다.

실제로 JUnit Jupiter는 모든 유형의 매개 변수를 지원합니다. @CsvSource은 몇 가지 기본 유형과 String으로 제한됩니다.

따라서 @CsvSource을 사용하는 대신 다음과 같이 @MethodSource을 사용해야합니다.

@ParameterizedTest 
@MethodSource("generateData") 
void shouldGetDataBit(int first, String second, List<String> third) { 
    System.out.println(first); 
    System.out.println(second); 
    System.out.println(third); 
} 

static Stream<Arguments> generateData() { 
    return Stream.of(
     Arguments.of(1, "foo", Arrays.asList("a", "b", "c")), 
     Arguments.of(2, "bar", Arrays.asList("x", "y", "z")) 
    ); 
} 
+1

FYI : 예를 들어 JUnit 5.1 용 사용자 안내서를 업데이트했습니다. https://github.com/junit-team/junit5/commit/eb6e401fde681d7da649025391691ff5a45ca0f0 –

+0

결과 문서 변경 사항은 이미 최신 스냅 샷에 표시되어 있습니다. http://junit.org/junit5/docs/snapshot/user-guide/#writing -tests-parameterized-tests-sources-MethodSource –

1

쉼표로 구분 된 문자열로 세 번째 요소를 입력하고 문자열을 사용자 안의 목록으로 분할합니다.

이 시점에서 나는 Junit5 Test Parameters가 기본 유형과 CsvSource 이외의 다른 유형을 지원하지 않는다는 것을 확실히 알고 있습니다.

+0

글쎄, 나는 이미하고 있어요 - 그냥 내가 대신 유연성을위한 JSON 문자열을 제공하는 하나의 값을 사용하고 –

+1

이하 "해키"뭔가를 기대하고 더 해킹이 필요하지 않습니다. Test 매개 변수 함수는 아직 베타 버전이며 개체가 나중에 지원 될 것입니다. – StefanE

+0

FYI : 해킹이 필요하지 않습니다. 자세한 내용은 내 대답을 참조하십시오. –