Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用
概述
有時(shí)候業(yè)務(wù)代碼里會(huì)根據(jù)一個(gè)枚舉值來(lái)區(qū)分業(yè)務(wù)場(chǎng)景,比如說:
public enum ActivityLimitEnum {
LIMIT(1,"封頂"),
UNLIMIT(0,"上不封頂");
}
如果編寫單元測(cè)試來(lái)驗(yàn)證業(yè)務(wù)代碼,至少需要寫兩個(gè)測(cè)試方法,一個(gè)驗(yàn)收封頂邏輯,一個(gè)驗(yàn)收不封頂邏輯。
@Test
@DisplayName("封頂")
void testLimit() {
}
@Test
@DisplayName("不封頂")
void testUnLimit() {
}
由于這兩個(gè)場(chǎng)景只是區(qū)分封頂和不封頂,其他的都是一樣的,如果寫兩個(gè)測(cè)試方法,testLimit和testUnLimit方法里會(huì)有很多重復(fù)代碼。這個(gè)時(shí)候Junit 5 中@ParameterizedTest和@EnumSource就可以派上用場(chǎng)了。
@ParameterizedTest
@EnumSource(ActivityLimitEnum.class)
@DisplayName("封頂和不封頂")
void test(ActivityLimitEnum activityLimitEnum) {
if (ActivityLimitEnum.LIMIT.equals(activityLimitEnum)) {
assertFalse(false);
}
else if (ActivityLimitEnum.UNLIMIT.equals(activityLimitEnum)) {
assertTrue(true);
}
}
Junit 5在執(zhí)行上面的test方法的時(shí)候,由于ActivityLimitEnum中有LIMIT和UNLIMIT兩個(gè)枚舉,先按照LIMIT類型執(zhí)行一次test方法,再按照UNLIMIT類型再次執(zhí)行test方法,共執(zhí)行兩次test方法,因此我們需要在test方法里,區(qū)分一下類型,按照實(shí)際情況編寫assert代碼進(jìn)行驗(yàn)證即可。
我們用Intellij IDEA執(zhí)行上面的單元測(cè)試,效果如下:

可以看到test方法確實(shí)執(zhí)行了兩次,LIMIT和UNLIMIT各執(zhí)行一次。
如果枚舉中的枚舉值非常多,而單元測(cè)試?yán)镏皇窍腧?yàn)證其中部分枚舉值,那可以用下面的方式:
@ParameterizedTest
@EnumSource(value = ActivityLimitEnum.class,names = {"LIMIT"})
@DisplayName("封頂和不封頂")
void test(ActivityLimitEnum activityLimitEnum) {
if (ActivityLimitEnum.LIMIT.equals(activityLimitEnum)) {
assertFalse(false);
}
else if (ActivityLimitEnum.UNLIMIT.equals(activityLimitEnum)) {
assertTrue(true);
}
}
這樣就只會(huì)執(zhí)行LIMIT枚舉值對(duì)應(yīng)的場(chǎng)景。
如果要在Junit 5里使用@ParameterizedTest和@EnumSource,需要添加如下依賴:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.2.0</version> <scope>test</scope> </dependency>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Spring boot注解@Async線程池實(shí)例詳解
這篇文章主要介紹了Spring boot注解@Async線程池實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
spring-boot-autoconfigure模塊用法詳解
autoconfigure就是自動(dòng)配置的意思,spring-boot通過spring-boot-autoconfigure體現(xiàn)了"約定優(yōu)于配置"這一設(shè)計(jì)原則,而spring-boot-autoconfigure主要用到了spring.factories和幾個(gè)常用的注解條件來(lái)實(shí)現(xiàn)自動(dòng)配置,思路很清晰也很簡(jiǎn)單,感興趣的朋友跟隨小編一起看看吧2022-11-11
Java 生產(chǎn)者/消費(fèi)者問題實(shí)例詳解
這篇文章主要實(shí)例分析了java中生產(chǎn)者消費(fèi)者問題的方法,需要的朋友可以可以參考下2017-04-04
maven打包zip包含bin下啟動(dòng)腳本的完整代碼
這篇文章主要介紹了maven打包zip包含bin下啟動(dòng)腳本,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
Java8中對(duì)于LocalDateTime的序列化和反序列化問題
這篇文章主要介紹了Java8中對(duì)于LocalDateTime的序列化和反序列化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Java自定義協(xié)議報(bào)文封裝 添加Crc32校驗(yàn)的實(shí)例
下面小編就為大家分享一篇Java自定義協(xié)議報(bào)文封裝 添加Crc32校驗(yàn)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-01-01

