2017-10-12 3 views
0

string,stringおよびlist<string>の3つのパラメータを使用してJUnit5テストをパラメータ化したいとします。これまでJUnit5のパラメータ化されたテストパラメータとしてリストを渡すには?

ない運私のユースケースのためのparamsを渡すの最も便利な方法である、@CsvSourceを使用していない:

タイプのJavaにjava.lang.String型のオブジェクトを変換する暗黙の変換を。 util.List

実際のテストでは、次のとおりです。

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

これが可能であれば任意のアイデア?私はここでコトリンを使用していますが、それは無関係でなければなりません。

答えて

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

カンマで区切った文字列として3番目の要素を指定し、文字列を内部のListに分割します。

この時点では、Junit5 Test Parametersはプリミティブ型以外のものをサポートしておらず、CsvSourceは型の混合を許可しているだけです。

+0

まあ、私はすでにこれをやっている - ちょうど私は、柔軟性と不要ハックのための代わりにJSON文字列を提供する唯一の値を使用しています –

+1

小さい何かのために「ハック」を望みました。テストパラメータ関数はまだベータ版で、うまくいけばオブジェクトは後で来るでしょう。 – StefanE

+0

FYI:ハックの必要はありません。詳細は私の答えを見てください。 –

関連する問題