概述
有時候業務代碼里會根據一個枚舉值來區分業務場景,比如說:
1
2
3
4
|
public enum activitylimitenum { limit( 1 , "封頂" ), unlimit( 0 , "上不封頂" ); } |
如果編寫單元測試來驗證業務代碼,至少需要寫兩個測試方法,一個驗收封頂邏輯,一個驗收不封頂邏輯。
1
2
3
4
5
6
7
8
|
@test @displayname ( "封頂" ) void testlimit() { } @test @displayname ( "不封頂" ) void testunlimit() { } |
由于這兩個場景只是區分封頂和不封頂,其他的都是一樣的,如果寫兩個測試方法,testlimit
和testunlimit
方法里會有很多重復代碼。這個時候junit 5
中@parameterizedtest
和@enumsource
就可以派上用場了。
1
2
3
4
5
6
7
8
9
10
11
|
@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
在執行上面的test
方法的時候,由于activitylimitenum
中有limit
和unlimit
兩個枚舉,先按照limit
類型執行一次test
方法,再按照unlimit
類型再次執行test
方法,共執行兩次test
方法,因此我們需要在test
方法里,區分一下類型,按照實際情況編寫assert
代碼進行驗證即可。
我們用intellij idea
執行上面的單元測試,效果如下:
可以看到test
方法確實執行了兩次,limit
和unlimit
各執行一次。
如果枚舉中的枚舉值非常多,而單元測試里只是想驗證其中部分枚舉值,那可以用下面的方式:
1
2
3
4
5
6
7
8
9
10
11
|
@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 ); } } |
這樣就只會執行limit
枚舉值對應的場景。
如果要在junit 5
里使用@parameterizedtest
和@enumsource
,需要添加如下依賴:
1
2
3
4
5
6
|
<dependency> <groupid>org.junit.jupiter</groupid> <artifactid>junit-jupiter-params</artifactid> <version> 5.2 . 0 </version> <scope>test</scope> </dependency> |
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/linsongbin1/article/details/82784224