2017-10-12 47 views
0

我想用三個參數來參數我JUnit5測試:stringstringlist<string>如何將列表作爲JUnit5的參數化測試參數傳遞?

至今沒有運氣使用@CsvSource,這是通過params用於在我的用例的最方便的方式時:

的隱式轉換到java.lang.String類型的對象轉換爲 類型的Java。 util.List

實際測試是:

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

這是可能的任何想法?我在這裏使用Kotlin,但它應該是不相關的。

回答

3

沒有理由使用破解通過StefanE的建議。

在這一點上,我非常確定Junit5測試參數不支持除原始類型和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

僅供參考:我更新了JUnit 5.1的用戶指南以包含此類示例。 https://github.com/junit-team/junit5/commit/eb6e401fde681d7da649025391691ff5a45ca0f0 –

+0

產生的文檔的變化是在最新的快照已經顯現:http://junit.org/junit5/docs/snapshot/user-guide/#writing -tests參數化的測試來源,MethodSource –

1

提供第三元件作爲逗號分隔的字符串和分割串入內部您測試列表。

在這一點上我敢肯定Junit5測試參數不支持什麼比原始類型和其他僅CsvSource一個類型的,允許混合。

+0

好吧,我已經這樣做了 - 只是希望東西少「哈克」 –

+1

我只使用一個提供一個JSON字符串,而不是對靈活性的價值和沒有黑客需要。測試參數功能仍處於測試階段,希望對象的支持稍後會提供。 – StefanE

+0

供參考:不需要破解。詳情請看我的答案。 –

相關問題