日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

=空值返回空值_@ParameterizedTest在@CvsSource中具有空值

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 =空值返回空值_@ParameterizedTest在@CvsSource中具有空值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

=空值返回空值

在JUnit 4中編寫參數化測試非常麻煩。 JUnit 5對框架進行了一些有用的改進,并且使用不同的參數運行相同的測試比以前的版本要簡單得多。 但是,在這樣的參數中傳遞空值存在一個小問題。

在本文中,我將向您展示如何在JUnit 5中的@ParametrziedTest的@CvsSource和@ValueSource中傳遞null 。

1. @CsvSource中的空值

為了分析問題,我們需要一個示例案例。

假設我們創建了一個名為DateRange的類,其中包含一個時間段的兩個邊界日期。 僅當您將至少一個邊界日期傳遞給構造函數時,才能創建新對象。 我們還需要確保開始日期早于結束日期。

使用JUnit 5中的@ParametrizedTest ,我們可以通過以下兩個測試來描述給定的需求。

@ParameterizedTest @CsvSource({"2017-06-01, 2018-10-15","null, 2018-10-15","2017-06-01, null" }) void shouldCreateValidDateRange(LocalDate startDate, LocalDate endDate) {new DateRange(startDate, endDate); }@ParameterizedTest @CsvSource({"2018-10-15, 2017-06-01","null, null" }) void shouldNotCreateInvalidDateRange(LocalDate startDate, LocalDate endDate) {assertThrows(IllegalArgumentException.class, () -> new DateRange(startDate, endDate)); }

但是,當您嘗試執行這些測試時,最終將出現類似于以下所示的錯誤。

org.junit.jupiter.api.extension.ParameterResolutionException:轉換索引0處的參數時出錯:無法將字符串“ null”轉換為java.time.LocalDate類型

盡管JUnit 5隨附了許多內置的轉換器,從字符串值到不同類型, 但是 @ValueSource或 @CsvSource中 不接受空值 。

那么,如何強制JUnit 5使用空文字呢?

2.自定義可為空的參數轉換器

幸運的是,JUnit 5具有靈活性,我們可以輕松擴展其功能。

默認情況下,框架使用DefaultArgumentConverter類將String轉換為其他類型。 我們的目標是將字符串“ null”表示為空文字。 其他字符串值應使用默認轉換器進行轉換。

為此,我們創建一個擴展SimpleArgumentConverter的類并實現其抽象的convert()方法。 在主體中,我們檢查“空”值。 在其他情況下,我們執行默認轉換器。

import org.junit.jupiter.params.converter.DefaultArgumentConverter;public final class NullableConverter extends SimpleArgumentConverter {@Overrideprotected Object convert(Object source, Class<?> targetType) throws ArgumentConversionException {if ("null".equals(source)) {return null;}return DefaultArgumentConverter.INSTANCE.convert(source, targetType);} }

請注意, 自JUnit 5.2起,上面提供 的 DefaultArgumentConverter.convert() 簽名 就可用。

3.使用自定義參數轉換器

準備好自定義轉換器后,我們可以在測試中使用@ConvertWith批注對其進行調用。

@ParameterizedTest @CsvSource({"2017-06-01, 2018-10-15","null, 2018-10-15","2017-06-01, null" }) void shouldCreateValidDateRange(@ConvertWith(NullableConverter.class) LocalDate startDate,@ConvertWith(NullableConverter.class) LocalDate endDate) {new DateRange(startDate, endDate); }

結論

至此,您應該已經知道如何在JUnit 5參數源中接受用于參數化測試的空值。 我希望這種轉換在框架的將來版本中將是自動的。 目前,我們需要一個小的解決方法。

如有任何疑問,請保留在評論中。 如果您想了解最新帖子,請關注我或加入訂閱列表。

翻譯自: https://www.javacodegeeks.com/2018/10/parameterizedtest-null-values-cvssource.html

=空值返回空值

總結

以上是生活随笔為你收集整理的=空值返回空值_@ParameterizedTest在@CvsSource中具有空值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。