想要在SB使用junit5進(jìn)行單元測(cè)試,只需先導(dǎo)入依賴:
然后在測(cè)試類上標(biāo)注SpringBootTest即可:
常用測(cè)試注解:
1.@DisplayName:在類或方法上加此注解边翼,會(huì)顯示該測(cè)試類/方法的名稱
2.@BeforeEach
如果我們想在每次測(cè)試前都執(zhí)行某一個(gè)方法鱼响,可以在該方法上加此注解,則該方法所在類內(nèi)所有測(cè)試方法執(zhí)行之前都會(huì)執(zhí)行此方法
3.@AfterEach
作用類似2
4.@BeforeAll :表示此方法在所有單元測(cè)試之前執(zhí)行组底,這個(gè)方法必須是靜態(tài)的
5.@AfterAll :表示此方法在所有單元測(cè)試之后執(zhí)行丈积,這個(gè)方法必須是靜態(tài)的
6.Disabled :表示測(cè)試類或測(cè)試方法不執(zhí)行,類似于JUnit4中的@Ignore
7.@Timeout :表示測(cè)試方法運(yùn)行如果超過(guò)了指定時(shí)間將會(huì)返回錯(cuò)誤
8.@RepeatedTest :表示方法可重復(fù)執(zhí)行指定的次數(shù)债鸡,如圖江滨,輸出5次1
斷言機(jī)制:
我們斷定某件事情一定會(huì)發(fā)生,如果沒(méi)發(fā)生一定是出現(xiàn)了問(wèn)題
一厌均、簡(jiǎn)單斷言
1.assertEquals判斷兩個(gè)對(duì)象或兩個(gè)原始類型是否相等
assertNotEquals判斷兩個(gè)對(duì)象或兩個(gè)原始類型是否不相等
如圖所示唬滑,第一條語(yǔ)句,當(dāng)3不等于1+2時(shí),會(huì)顯示“simple math”的提示
2.assertSame判斷兩個(gè)對(duì)象引用是否指向同一個(gè)對(duì)象
assertNotSame判斷兩個(gè)對(duì)象引用是否指向不同的對(duì)象
3.assertTrue判斷給定的布爾值是否為 true
assertFalse判斷給定的布爾值是否為 false
4.assertNull判斷給定的對(duì)象引用是否為 null
assertNotNull判斷給定的對(duì)象引用是否不為 null
二晶密、數(shù)組斷言
通過(guò) assertArrayEquals 方法來(lái)判斷兩個(gè)對(duì)象或原始類型的數(shù)組是否相等
三擒悬、組合斷言
assertAll 方法接受多個(gè) org.junit.jupiter.api.Executable 函數(shù)式接口的實(shí)例作為要驗(yàn)證的斷言,可以通過(guò) lambda 表達(dá)式很容易的提供這些斷言
四惹挟、異常斷言
@Test
@DisplayName("異常測(cè)試")
public void exceptionTest() {
? ? ArithmeticException exception = Assertions.assertThrows(
? ? ? ? ? //扔出斷言異常
? ? ? ? ? ? ArithmeticException.class, () -> System.out.println(1 % 0));
五茄螃、超時(shí)斷言
Junit5還提供了Assertions.assertTimeout() 為測(cè)試方法設(shè)置了超時(shí)時(shí)間
六缝驳、快速失敗
前置條件
JUnit 5 中的前置條件(assumptions【假設(shè)】)類似于斷言连锯,不同之處在于不滿足的斷言會(huì)使得測(cè)試方法失敗,而不滿足的前置條件只會(huì)使得測(cè)試方法的執(zhí)行終止用狱。前置條件可以看成是測(cè)試方法執(zhí)行的前提运怖,當(dāng)該前提不滿足時(shí),就沒(méi)有繼續(xù)執(zhí)行的必要夏伊。
assumeTrue 和 assumFalse 確保給定的條件為 true 或 false摇展,不滿足條件會(huì)使得測(cè)試執(zhí)行終止。assumingThat 的參數(shù)是表示條件的布爾值和對(duì)應(yīng)的 Executable 接口的實(shí)現(xiàn)對(duì)象溺忧。只有條件滿足時(shí)咏连,Executable 對(duì)象才會(huì)被執(zhí)行;當(dāng)條件不滿足時(shí)鲁森,測(cè)試執(zhí)行并不會(huì)終止祟滴。
參數(shù)化測(cè)試:
利用@ValueSource可以指定入?yún)ⅲ苊饬嗣總€(gè)參數(shù)都寫(xiě)一個(gè)測(cè)試方法歌溉,節(jié)省代碼垄懂。
如圖,輸出為:
除了int之外痛垛,參數(shù)化測(cè)試還支持多種類型的數(shù)據(jù)草慧,包括枚舉,參數(shù)甚至可以來(lái)源于方法匙头,但這個(gè)方法的返回值必須是個(gè)流漫谷,如下: