JUnit5中的參數(shù)化測(cè)試實(shí)現(xiàn)
JUnit是Java中最受歡迎的測(cè)試框架之一。JUnit 5是JUnit的最新版本,它引入了許多新功能,其中包括參數(shù)化測(cè)試。參數(shù)化測(cè)試使得我們可以使用不同的參數(shù)運(yùn)行同一個(gè)測(cè)試方法,從而減少我們編寫測(cè)試用例的工作量,并提高測(cè)試覆蓋率。在本文中,我們將深入探討JUnit 5中的參數(shù)化測(cè)試。
參數(shù)化測(cè)試的基本概念
在JUnit 5中,我們可以使用@ParameterizedTest注解來創(chuàng)建參數(shù)化測(cè)試。該注解用于標(biāo)記一個(gè)測(cè)試方法,并告訴JUnit該方法需要使用不同的參數(shù)運(yùn)行多次。
下面是一個(gè)簡(jiǎn)單的例子:
@ParameterizedTest @ValueSource(ints = {1, 2, 3}) void testWithInts(int argument) { assertTrue(argument > 0 && argument < 4); }
在上面的例子中,我們使用@ParameterizedTest注解標(biāo)記了一個(gè)測(cè)試方法,并使用@ValueSource注解指定了參數(shù)的值。在這個(gè)例子中,我們將測(cè)試方法運(yùn)行了三次,每次使用不同的參數(shù)值(1、2和3)。在每次運(yùn)行測(cè)試方法時(shí),JUnit都會(huì)將參數(shù)值傳遞給該方法。
使用不同類型的參數(shù)
在JUnit 5中,我們可以使用不同類型的參數(shù)來運(yùn)行參數(shù)化測(cè)試。下面是一些常見的參數(shù)類型:
- @ValueSource:用于傳遞基本類型的參數(shù)。
- @EnumSource:用于傳遞枚舉類型的參數(shù)。
- @MethodSource:用于傳遞一個(gè)方法返回的參數(shù)列表。
- @CsvSource:用于傳遞逗號(hào)分隔的參數(shù)列表。
- @CsvFileSource:用于傳遞CSV文件中的參數(shù)列表。
- @ArgumentsSource:用于傳遞自定義的參數(shù)列表。
下面是一個(gè)使用@EnumSource注解的例子:
@ParameterizedTest @EnumSource(value = TimeUnit.class, names = {"DAYS", "HOURS"}) void testWithEnumSource(TimeUnit unit) { assertTrue(EnumSet.of(TimeUnit.DAYS, TimeUnit.HOURS).contains(unit)); }
在上面的例子中,我們使用@EnumSource注解來指定枚舉類型的參數(shù)。我們將該注解的value參數(shù)設(shè)置為TimeUnit.class,表示我們要使用TimeUnit枚舉類型的參數(shù)。我們將該注解的names參數(shù)設(shè)置為{"DAYS", "HOURS"},表示我們只想使用TimeUnit.DAYS和TimeUnit.HOURS兩種參數(shù)值。
使用自定義的參數(shù)
除了使用JUnit提供的參數(shù)類型之外,我們還可以使用自定義的參數(shù)。我們只需要實(shí)現(xiàn)ArgumentsProvider接口,并在測(cè)試方法上使用@ArgumentsSource注解即可。
下面是一個(gè)使用自定義參數(shù)的例子:
class MyArgumentsProvider implements ArgumentsProvider { ? ? @Override ? ? public Stream<? extends Arguments> provideArguments(ExtensionContext context) { ? ? ? ? return Stream.of(Arguments.of("apple", 1), Arguments.of("banana", 2)); ? ? } } @ParameterizedTest @ArgumentsSource(MyArgumentsProvider.class) void testWithCustomArgs(String fruit, int number) { ? ? assertNotNull(fruit); ? ? assertNotEquals(0, number); }
在上面的例子中,我們實(shí)現(xiàn)了一個(gè)名為MyArgumentsProvider的自定義參數(shù)提供器。該提供器返回了兩個(gè)參數(shù)列表,每個(gè)參數(shù)列表包含兩個(gè)參數(shù)。我們使用@ArgumentsSource注解來指定該提供器,并將其應(yīng)用于測(cè)試方法。
參數(shù)化測(cè)試的高級(jí)用法
在JUnit 5中,我們可以使用@DisplayName注解來為測(cè)試方法指定一個(gè)自定義名稱。這個(gè)名稱將用于在測(cè)試報(bào)告中顯示。
下面是一個(gè)使用@DisplayName注解的例子:
@ParameterizedTest(name = "{index} => a={0}, b={1}, sum={2}") @CsvSource({"1,2,3", "4,5,9", "6,7,13"}) @DisplayName("Test adding two numbers") void testAdd(int a, int b, int sum) { assertEquals(sum, a + b); }
在上面的例子中,我們使用@CsvSource注解指定了參數(shù)列表,并使用@DisplayName注解為測(cè)試方法指定了一個(gè)自定義名稱。
結(jié)論
JUnit 5中的參數(shù)化測(cè)試使得我們可以使用不同的參數(shù)運(yùn)行同一個(gè)測(cè)試方法,從而減少了我們編寫測(cè)試用例的工作量,并提高了測(cè)試覆蓋率。在本文中,我們介紹了JUnit 5中參數(shù)化測(cè)試的基本概念、使用不同類型的參數(shù)、使用自定義的參數(shù)以及高級(jí)用法。希望這篇文章能夠幫助您更好地理解JUnit 5中的參數(shù)化測(cè)試。
到此這篇關(guān)于JUnit5中的參數(shù)化測(cè)試實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)JUnit5 參數(shù)化測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
多模塊maven的deploy集成gitlab?ci自動(dòng)發(fā)版配置
這篇文章主要為大家介紹了多模塊maven項(xiàng)目deploy集成gitlab?ci自動(dòng)發(fā)版的配置流程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02Java實(shí)現(xiàn)系統(tǒng)限流的示例代碼
限流是保障系統(tǒng)高可用的方式之一,也是大廠高頻面試題,它在微服務(wù)系統(tǒng)中,緩存、限流、熔斷是保證系統(tǒng)高可用的三板斧,所以本文我們就來聊聊如何實(shí)現(xiàn)系統(tǒng)限流吧2023-09-09Java模擬HTTP Get Post請(qǐng)求實(shí)現(xiàn)論壇自動(dòng)回帖功能
這篇文章主要介紹了Java模擬HTTP Get Post請(qǐng)求實(shí)現(xiàn)論壇自動(dòng)回帖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09選擇Spring Boot項(xiàng)目的內(nèi)嵌容器的理由
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了選擇Spring Boot項(xiàng)目的內(nèi)嵌容器,需要的朋友可以參考下2017-11-11Java 配置log4j日志文件路徑 (附-獲取當(dāng)前類路徑的多種操作)
這篇文章主要介紹了Java 配置log4j日志文件路徑 (附-獲取當(dāng)前類路徑的多種操作),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10純Java實(shí)現(xiàn)數(shù)字證書生成簽名的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄僇ava實(shí)現(xiàn)數(shù)字證書生成簽名的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08springboot oauth2實(shí)現(xiàn)單點(diǎn)登錄實(shí)例
我們見過的很多網(wǎng)站,容許使用第三方賬號(hào)登錄,oauth2是用來做三方登錄的,本文就詳細(xì)的介紹springboot oauth2實(shí)現(xiàn)單點(diǎn)登錄實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下2022-01-01play for scala 實(shí)現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面
這篇文章主要介紹了play for scala 實(shí)現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面的相關(guān)資料,需要的朋友可以參考下2016-11-11