成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot集成JUnit5,優雅單元測試!

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

為什么使用JUnit5


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

簡介

???

如圖,JUnit5結構如下:


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

依賴引入

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

Spring Boot 基礎就不介紹了,推薦看下面這個最新的實戰教程。

??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:在每個單元測試方法執行前都執行一遍
  •  @BeforeAll:在每個單元測試方法執行前執行一遍(只執行一次)
  •  @DisplayName("商品入庫測試"):用于指定單元測試的名稱
  •  @Disabled:當前單元測試置為無效,即單元測試時跳過該測試
  •  @RepeatedTest(n):重復性測試,即執行n次
  •  @ParameterizedTest:參數化測試,
  •  @ValueSource(ints = {1, 2, 3}):參數化測試提供數據

斷言

JUnit Jupiter提供了強大的斷言方法用以驗證結果,在使用時需要借助java8的新特性lambda表達式,均是來自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用來判斷執行拋出的異常是否符合預期,并可以使用異常類型接收返回值進行其他操作 

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

assertTimeout用來判斷執行過程是否超時 

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

assertAll是組合斷言,當它內部所有斷言正確執行完才算通過。Spring Boot 系列面試題和答案我都整理好了,關注公眾號Java技術棧,回復:面試,可以免費獲取。 

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

重復性測試

在許多場景中我們需要對同一個接口方法進行重復測試,例如對冪等性接口的測試。

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

@RepeatedTest(3)  @DisplayName("重復測試")  void repeatedTest() {      System.out.println("調用");  } 

???

參數化測試

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

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

內嵌測試

JUnit5提供了嵌套單元測試的功能,可以更好展示測試類之間的業務邏輯關系,我們通常是一個業務對應一個測試類,有業務關系的類其實可以寫在一起。

這樣有利于進行測試。而且內聯的寫法可以大大減少不必要的類,精簡項目,防止類爆炸等一系列問題。 

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


責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2021-08-26 11:00:54

Spring BootJUnit5Java

2023-12-28 17:36:10

JUnit5單元測試框架

2020-07-21 14:40:45

Spring Boot單元測試Java

2021-09-01 12:03:49

Spring單元測試

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2020-07-07 07:33:12

Java單元集成

2011-08-11 13:02:43

Struts2Junit

2025-06-12 03:10:00

2023-09-27 23:43:51

單元測試Spring

2013-06-04 09:49:04

Spring單元測試軟件測試

2011-11-18 15:18:41

Junit單元測試Java

2017-01-14 23:42:49

單元測試框架軟件測試

2012-02-07 09:08:50

Feed4JUnitJava

2012-07-22 20:34:27

springMVCJUnit

2023-12-24 10:00:35

Java單元測試

2022-07-04 05:59:18

KotlinJUnit5數據庫

2009-06-08 19:59:09

EclipseJUnit單元測試

2009-06-08 19:57:29

EclipseJUnit4單元測試

2014-02-25 10:25:52

單元測試測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久 | 自拍亚洲 | 成人av网站在线观看 | 日韩在线观看网站 | 精品少妇v888av | 午夜精品一区二区三区在线观看 | 91久久国产综合久久91精品网站 | 中文字幕 国产精品 | 一区二区三区精品视频 | 欧美 日韩 综合 | 久久不射电影网 | 亚洲国产成人久久综合一区,久久久国产99 | 日韩三区 | 国产精品久久久久一区二区三区 | 日日操av | 精品国产91 | av手机免费在线观看 | 久久久久国产一区二区三区 | 91在线视频免费观看 | 9999国产精品欧美久久久久久 | 天天干在线播放 | 噜噜噜噜狠狠狠7777视频 | av网站免费在线观看 | 免费看片在线播放 | 久草视频观看 | 亚洲欧美在线观看视频 | 日韩av一区二区在线观看 | 精品欧美一区二区三区久久久小说 | 欧美二三区 | 日日夜夜天天 | 久久大陆 | 色又黄又爽网站www久久 | 四虎永久| 中文字幕在线免费观看 | 精品美女视频在线观看免费软件 | 少妇精品亚洲一区二区成人 | 天天干b| 99pao成人国产永久免费视频 | 麻豆hd | 精品国产一区探花在线观看 | 一级欧美日韩 |