<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 5881字,需瀏覽 12分鐘

           ·

          2021-09-14 10:40

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          牛逼!又發(fā)現(xiàn)了一款面試題庫(kù),太全了??!

          點(diǎn)擊查看

          為什么使用JUnit5

          簡(jiǎn)介

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

          依賴引入

          我們以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>

          常用注解

          斷言

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

          assertTrueassertFalse用來(lái)判斷條件是否為truefalse

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

          assertNullassertNotNull用來(lái)判斷條件是否為·null

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

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

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

          assertTimeout用來(lái)判斷執(zhí)行過(guò)程是否超時(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í)行完才算通過(guò)

          @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通過(guò)使用@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)類(lèi)似于重復(fù)性測(cè)試,只不過(guò)每次運(yùn)行傳入的參數(shù)不用。需要使用到@ParameterizedTest,同時(shí)也需要@ValueSource提供一組數(shù)據(jù),它支持八種基本類(lèi)型以及String和自定義對(duì)象類(lèi)型,使用極其方便。

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

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

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

          @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);
                  }
              }
          }
          來(lái)源 | https://www.cnblogs.com/haixiang/p/13812363.html


          如有文章對(duì)你有幫助,

          歡迎關(guān)注??、點(diǎn)贊??、轉(zhuǎn)發(fā)??!


          推薦, Java面試題庫(kù),詳情點(diǎn)擊:
          牛逼!又發(fā)現(xiàn)了一款牛逼的Java面試題庫(kù),史上最強(qiáng)!

          點(diǎn)擊文末“閱讀原文”可直達(dá)

          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天婷婷综合 | 久久久久亚洲AV成人无码电影 | 人人看黄色视频 | 91狠狠综合久久久 | 色婷婷国产精品视频一区 |