Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用
概述
有時候業(yè)務(wù)代碼里會根據(jù)一個枚舉值來區(qū)分業(yè)務(wù)場景,比如說:
public enum ActivityLimitEnum { LIMIT(1,"封頂"), UNLIMIT(0,"上不封頂"); }
如果編寫單元測試來驗證業(yè)務(wù)代碼,至少需要寫兩個測試方法,一個驗收封頂邏輯,一個驗收不封頂邏輯。
@Test @DisplayName("封頂") void testLimit() { } @Test @DisplayName("不封頂") void testUnLimit() { }
由于這兩個場景只是區(qū)分封頂和不封頂,其他的都是一樣的,如果寫兩個測試方法,testLimit
和testUnLimit
方法里會有很多重復(fù)代碼。這個時候Junit 5
中@ParameterizedTest
和@EnumSource
就可以派上用場了。
@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
方法的時候,由于ActivityLimitEnum
中有LIMIT
和UNLIMIT
兩個枚舉,先按照LIMIT
類型執(zhí)行一次test
方法,再按照UNLIMIT
類型再次執(zhí)行test
方法,共執(zhí)行兩次test
方法,因此我們需要在test
方法里,區(qū)分一下類型,按照實際情況編寫assert
代碼進(jìn)行驗證即可。
我們用Intellij IDEA
執(zhí)行上面的單元測試,效果如下:
可以看到test
方法確實執(zhí)行了兩次,LIMIT
和UNLIMIT
各執(zhí)行一次。
如果枚舉中的枚舉值非常多,而單元測試?yán)镏皇窍腧炞C其中部分枚舉值,那可以用下面的方式:
@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); } }
這樣就只會執(zhí)行LIMIT
枚舉值對應(yī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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
spring-boot-autoconfigure模塊用法詳解
autoconfigure就是自動配置的意思,spring-boot通過spring-boot-autoconfigure體現(xiàn)了"約定優(yōu)于配置"這一設(shè)計原則,而spring-boot-autoconfigure主要用到了spring.factories和幾個常用的注解條件來實現(xiàn)自動配置,思路很清晰也很簡單,感興趣的朋友跟隨小編一起看看吧2022-11-11Java8中對于LocalDateTime的序列化和反序列化問題
這篇文章主要介紹了Java8中對于LocalDateTime的序列化和反序列化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Java自定義協(xié)議報文封裝 添加Crc32校驗的實例
下面小編就為大家分享一篇Java自定義協(xié)議報文封裝 添加Crc32校驗的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01