自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Boot集成JUnit5,優(yōu)雅單元測(cè)試!

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

為什么使用JUnit5


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

簡(jiǎn)介

???

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


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

依賴引入

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

Spring Boot 基礎(chǔ)就不介紹了,推薦看下面這個(gè)最新的實(shí)戰(zhàn)教程。

??https://github.com/javastacks/spring-boot-best-practice?

<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è)單元測(cè)試方法執(zhí)行前都執(zhí)行一遍
  •  @BeforeAll:在每個(gè)單元測(cè)試方法執(zhí)行前執(zhí)行一遍(只執(zhí)行一次)
  •  @DisplayName("商品入庫(kù)測(cè)試"):用于指定單元測(cè)試的名稱
  •  @Disabled:當(dāng)前單元測(cè)試置為無效,即單元測(cè)試時(shí)跳過該測(cè)試
  •  @RepeatedTest(n):重復(fù)性測(cè)試,即執(zhí)行n次
  •  @ParameterizedTest:參數(shù)化測(cè)試,
  •  @ValueSource(ints = {1, 2, 3}):參數(shù)化測(cè)試提供數(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("測(cè)試斷言equals")  void testEquals() {   assertTrue(3 < 4);  } 

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

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

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

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

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

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

assertAll是組合斷言,當(dāng)它內(nèi)部所有斷言正確執(zhí)行完才算通過。Spring Boot 系列面試題和答案我都整理好了,關(guān)注公眾號(hào)Java技術(shù)棧,回復(fù):面試,可以免費(fèi)獲取。 

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

重復(fù)性測(cè)試

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

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

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

???

參數(shù)化測(cè)試

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

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

內(nèi)嵌測(cè)試

JUnit5提供了嵌套單元測(cè)試的功能,可以更好展示測(cè)試類之間的業(yè)務(wù)邏輯關(guān)系,我們通常是一個(gè)業(yè)務(wù)對(duì)應(yīng)一個(gè)測(cè)試類,有業(yè)務(wù)關(guān)系的類其實(shí)可以寫在一起。

這樣有利于進(jìn)行測(cè)試。而且內(nèi)聯(lián)的寫法可以大大減少不必要的類,精簡(jiǎn)項(xiàng)目,防止類爆炸等一系列問題。 

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


責(zé)任編輯:龐桂玉 來源: Java技術(shù)棧
相關(guān)推薦

2021-08-26 11:00:54

Spring BootJUnit5Java

2023-12-28 17:36:10

JUnit5單元測(cè)試框架

2020-07-21 14:40:45

Spring Boot單元測(cè)試Java

2021-09-01 12:03:49

Spring單元測(cè)試

2017-01-14 23:26:17

單元測(cè)試JUnit測(cè)試

2017-01-16 12:12:29

單元測(cè)試JUnit

2020-07-07 07:33:12

Java單元集成

2011-08-11 13:02:43

Struts2Junit

2023-09-27 23:43:51

單元測(cè)試Spring

2011-11-18 15:18:41

Junit單元測(cè)試Java

2013-06-04 09:49:04

Spring單元測(cè)試軟件測(cè)試

2012-02-07 09:08:50

Feed4JUnitJava

2017-01-14 23:42:49

單元測(cè)試框架軟件測(cè)試

2012-07-22 20:34:27

springMVCJUnit

2022-07-04 05:59:18

KotlinJUnit5數(shù)據(jù)庫(kù)

2009-06-08 20:04:06

EclipseJUnit4單元測(cè)試

2009-06-08 19:59:09

EclipseJUnit單元測(cè)試

2009-06-08 19:57:29

EclipseJUnit4單元測(cè)試

2014-02-25 10:25:52

單元測(cè)試測(cè)試

2023-12-24 10:00:35

Java單元測(cè)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)