2017-10-12 2 views
0

Ich möchte meine JUnit5-Tests mit drei Parametern parametrieren: string, string und list<string>.Wie übergebe ich eine Liste als parametrisierter Testparameter von JUnit5?

Kein bisher Glück, wenn @CsvSource mit, die die Weitergabe params für meinen Anwendungsfall des bequemste Weg ist:

Keine implizite Konvertierung Objekt vom Typ java.lang.String Typ Java zu konvertieren. util.List

Der eigentliche Test ist:

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

Jede Idee, wenn dies möglich ist? Ich benutze Kotlin hier, aber es sollte irrelevant sein.

Antwort

3

Es gibt keinen Grund, einen Hack wie von StefanE vorgeschlagen zu verwenden.

An diesem Punkt bin ich ziemlich sicher, dass Junit5 Test-Parameter nichts anderes als primitive Typen und CsvSource nur eine einzige Unterstützung der Mischung der Typen unterstützt.

Tatsächlich unterstützt JUnit Jupiter Parameter jeder Art. Es ist nur, dass die @CsvSource auf ein paar primitive Typen und String beschränkt ist.

Anstatt also @CsvSource zu verwenden, sollten Sie wie folgt eine @MethodSource verwenden.

@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: Ich habe das Benutzerhandbuch für JUnit 5.1 aktualisiert, um ein solches Beispiel hinzuzufügen. https://github.com/junit-team/junit5/commit/eb6e401fde681d7da649025391691ff5a45ca0f0 –

+0

Die resultierende Änderung der Dokumentation ist bereits in den neuesten Snapshots sichtbar: http://junit.org/junit5/docs/snapshot/user-guide/#writing -tests-parametrisierte Tests-Quellen-MethodSource –

1

Geben Sie das dritte Element als kommagetrennte Zeichenfolge an, und teilen Sie die Zeichenfolge in eine Liste, die Sie testen.

An diesem Punkt bin ich ziemlich sicher, dass Junit5 Testparameter nichts anderes als primitive Typen und CsvSource nur eine unterstützt, die das Mischen der Typen ermöglicht.

+0

Nun, mache ich das schon - hoffte nur für etwas weniger „Hacky“ –

+1

Ich verwende nur einen Wert ein JSON-String statt für Flexibilität und keine Hacks benötigt. Die Test-Parameter-Funktion ist immer noch in Beta, hoffentlich wird die Unterstützung für Objekte später kommen. – StefanE

+0

FYI: Es gibt keinen Grund für einen Hack. Bitte sehen Sie meine Antwort für Details. –

Verwandte Themen