亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

Springboot集成JUnit5優(yōu)雅進(jìn)行單元測試的示例

瀏覽:52日期:2023-04-17 13:12:54

為什么使用JUnit5

JUnit4被廣泛使用,但是許多場景下使用起來語法較為繁瑣,JUnit5中支持lambda表達(dá)式,語法簡單且代碼不冗余。 JUnit5易擴(kuò)展,包容性強(qiáng),可以接入其他的測試引擎。 功能更強(qiáng)大提供了新的斷言機(jī)制、參數(shù)化測試、重復(fù)性測試等新功能。 ps:開發(fā)人員為什么還要測試,單測寫這么規(guī)范有必要嗎?其實(shí)單測是開發(fā)人員必備技能,只不過很多開發(fā)人員開發(fā)任務(wù)太重導(dǎo)致調(diào)試完就不管了,沒有系統(tǒng)化得單元測試,單元測試在系統(tǒng)重構(gòu)時(shí)能發(fā)揮巨大的作用,可以在重構(gòu)后快速測試新的接口是否與重構(gòu)前有出入。

簡介

Springboot集成JUnit5優(yōu)雅進(jìn)行單元測試的示例

如圖,JUnit5結(jié)構(gòu)如下:

JUnit Platform: 這是Junit提供的平臺(tái)功能模塊,通過它,其它的測試引擎都可以接入Junit實(shí)現(xiàn)接口和執(zhí)行。 JUnit JUpiter:這是JUnit5的核心,是一個(gè)基于JUnit Platform的引擎實(shí)現(xiàn),它包含許多豐富的新特性來使得自動(dòng)化測試更加方便和強(qiáng)大。 JUnit Vintage:這個(gè)模塊是兼容JUnit3、JUnit4版本的測試引擎,使得舊版本的自動(dòng)化測試也可以在JUnit5下正常運(yùn)行。

依賴引入

我們以SpringBoot2.3.1為例,引入如下依賴,防止使用舊的junit4相關(guān)接口我們將其依賴排除。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions><exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId></exclusion> </exclusions> </dependency>

常用注解

@BeforeEach:在每個(gè)單元測試方法執(zhí)行前都執(zhí)行一遍 @BeforeAll:在每個(gè)單元測試方法執(zhí)行前執(zhí)行一遍(只執(zhí)行一次) @DisplayName('商品入庫測試'):用于指定單元測試的名稱 @Disabled:當(dāng)前單元測試置為無效,即單元測試時(shí)跳過該測試 @RepeatedTest(n):重復(fù)性測試,即執(zhí)行n次 @ParameterizedTest:參數(shù)化測試, @ValueSource(ints = {1, 2, 3}):參數(shù)化測試提供數(shù)據(jù)

斷言

JUnit Jupiter提供了強(qiáng)大的斷言方法用以驗(yàn)證結(jié)果,在使用時(shí)需要借助java8的新特性lambda表達(dá)式,均是來自org.junit.jupiter.api.Assertions包的static方法。

assertTrue與assertFalse用來判斷條件是否為true或false

@Test @DisplayName('測試斷言equals') void testEquals() { assertTrue(3 < 4); }

assertNull與assertNotNull用來判斷條件是否為·null

@Test @DisplayName('測試斷言NotNull') void testNotNull() { assertNotNull(new Object()); }

assertThrows用來判斷執(zhí)行拋出的異常是否符合預(yù)期,并可以使用異常類型接收返回值進(jìn)行其他操作

@Test @DisplayName('測試斷言拋異常') void testThrows() { ArithmeticException arithExcep = assertThrows(ArithmeticException.class, () -> { int m = 5/0; }); assertEquals('/ by zero', arithExcep.getMessage()); }

assertTimeout用來判斷執(zhí)行過程是否超時(shí)

@Test @DisplayName('測試斷言超時(shí)') void testTimeOut() { String actualResult = assertTimeout(ofSeconds(2), () -> { Thread.sleep(1000); return 'a result'; }); System.out.println(actualResult); }

assertAll是組合斷言,當(dāng)它內(nèi)部所有斷言正確執(zhí)行完才算通過

@Test @DisplayName('測試組合斷言') void testAll() { assertAll('測試item商品下單',() -> { //模擬用戶余額扣減 assertTrue(1 < 2, '余額不足');},() -> { //模擬item數(shù)據(jù)庫扣減庫存 assertTrue(3 < 4);},() -> { //模擬交易流水落庫 assertNotNull(new Object());} ); }

重復(fù)性測試

在許多場景中我們需要對同一個(gè)接口方法進(jìn)行重復(fù)測試,例如對冪等性接口的測試。

JUnit Jupiter通過使用@RepeatedTest(n)指定需要重復(fù)的次數(shù)

@RepeatedTest(3) @DisplayName('重復(fù)測試') void repeatedTest() { System.out.println('調(diào)用'); }

Springboot集成JUnit5優(yōu)雅進(jìn)行單元測試的示例

參數(shù)化測試

參數(shù)化測試可以按照多個(gè)參數(shù)分別運(yùn)行多次單元測試這里有點(diǎn)類似于重復(fù)性測試,只不過每次運(yùn)行傳入的參數(shù)不用。需要使用到@ParameterizedTest,同時(shí)也需要@ValueSource提供一組數(shù)據(jù),它支持八種基本類型以及String和自定義對象類型,使用極其方便。

@ParameterizedTest @ValueSource(ints = {1, 2, 3}) @DisplayName('參數(shù)化測試') void paramTest(int a) { assertTrue(a > 0 && a < 4); }

內(nèi)嵌測試

JUnit5提供了嵌套單元測試的功能,可以更好展示測試類之間的業(yè)務(wù)邏輯關(guān)系,我們通常是一個(gè)業(yè)務(wù)對應(yīng)一個(gè)測試類,有業(yè)務(wù)關(guān)系的類其實(shí)可以寫在一起。這樣有利于進(jìn)行測試。而且內(nèi)聯(lián)的寫法可以大大減少不必要的類,精簡項(xiàng)目,防止類爆炸等一系列問題。

@SpringBootTest@AutoConfigureMockMvc@DisplayName('Junit5單元測試')public class MockTest { //.... @Nested @DisplayName('內(nèi)嵌訂單測試') class OrderTestClas { @Test @DisplayName('取消訂單') void cancelOrder() { int status = -1; System.out.println('取消訂單成功,訂單狀態(tài)為:'+status); } }}

以上就是Springboot集成JUnit5優(yōu)雅進(jìn)行單元測試的示例的詳細(xì)內(nèi)容,更多關(guān)于Springboot 單元測試的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 久色乳综合思思在线视频 | 欧美精品免费线视频观看视频 | 国产黄色免费网站 | 国产精品手机在线观看 | 高清 国产 日韩 欧美 | 欧美91精品久久久久网免费 | 97dyy影院理论片 | 国产欧美曰韩一区二区三区 | 国产一区二区三区精品视频 | 亚洲 欧美 在线观看 | 国产一区二区三区不卡在线观看 | 26uuu影院亚洲欧美综合 | 欧美一区二区视频 | 成人网18免费下 | 亚洲日本aⅴ片在线观看香蕉 | 国产伦一区二区三区四区久久 | 91久久国产精品视频 | 波多野结衣一级 | 国产午夜精品久久理论片 | 欧美日本亚洲国产一区二区 | 黄色天堂| 一区二区不卡视频在线观看 | 久久免费视频播放 | 国产成人亚洲欧美三区综合 | 欧美成人视 | 成年人网站在线 | 日本a级片免费看 | 久久毛片视频 | 泰国情欲片寂寞的寡妇在线观看 | 国产午夜亚洲精品理论片不卡 | 在线一区二区三区 | 亚洲一区www | 毛片在线免费观看网站 | 国产精品久久久久一区二区三区 | 在线观看一二三区 | 国内高清久久久久久久久 | 精品成人在线 | 一区二区三区不卡在线 | 成人毛片免费观看视频大全 | 老王午夜69精品影院 | 久久精品国产亚洲片 |