Java Junit單元測試(入門必看篇)

錦湘發表於2023-11-17

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介紹單元測試工具Junit使用以及部分理論知識

?歡迎點贊 ? 收藏 ⭐留言評論 ?私信必回喲?

?博主收將持續更新學習記錄獲,友友們有任何問題可以在評論區留言

 

什麼是Junit單元測試?

JUnit 是一個 Java 程式語言的單元測試框架。JUnit 在測試驅動的開發方面有很重要的發展,是起源於 JUnit 的一個統稱為 xUnit 的單元測試框架之一。所謂 xUnit,就是一套基於測試驅動開發的測試框架,它的機制:將程式 預期的結果與程式執行的最終結果進行比對,確保對結果的可預知性。

單元測試是一個對單一實體(類或方法)的測試

 

為什麼要使用Junit單元測試?

在剛剛接觸到Junit的時候有一個這樣的問題,進行測試的話可以使用main函式,那為什麼要使用junit?

總結:有以下幾點

  • Junit單元測試可單個多個執行,多個共享資料
  • 有很多註解,可以在之前...之後執行
  • 比main程式碼少一點
  • 斷言測試預期結果

最重要的是規範以及方便,main寫完測試完後 都是註釋或者直接刪掉,而Junit不需要

 

Junit單元測試的使用:

1、註解:

Junit提供了非常強大的註解功能,透過@Test註解修飾到方法上,該方法就變成了一個測試方法,執行當前類時,會自動的執行該類下所有帶@Test註解的用例

在使用這些Junit提供的註解時,需要在pom.xml檔案中進行配置:

Java Junit單元測試(入門必看篇)

@Test註解示例:

Java Junit單元測試(入門必看篇)

 

除了@Test註解外,還有以下常用註解:

  • @AfterEach:當前的方法需要在每個用例執行之後都執行一次
  • @BeforeEach:當前的方法需要在每個用例執行之前都執行一次
  • @AfterAll:當前的方法需要在當前類下所有用例執行之後執行一次,且被該註解修飾的方法必須為靜態方法
  • @BeforeAll:當前的方法需要在當前類下所有用例執行之前執行一次,且被該註解修飾的方法必須為靜態方法


2、用例的執行順序

如下圖所示,測試用例的執行並不會按照我們編寫程式碼的順序來執行:

Java Junit單元測試(入門必看篇)

 

如果在實際測試中,我們需要完成連貫的多個步驟的測試,是需要規定測試用例執行的順序的,可以透過@order註解來實現排序:

  • 先使用註解說明當前類下所有的用例需要使用@Order註解來進行排序(注意:該註解必須要用在類上)
  • 然後透過@Order來指定用例的具體順序

呼叫註解,實現排序效果

Java Junit單元測試(入門必看篇)

 除錯結果展示:

Java Junit單元測試(入門必看篇)

 

簡單來說:Java中的Order註解是用來控制多個Bean的載入順序的。

 

3、測試套件

什麼是測試套件?

當我們一個類中有多個測試用例時,我們不可能挨個去執行,那樣將會很耗費時間,這時我們就需要測試套件來指定類或者指定包名來執行類下或者包下的所有測試用例。

如果要使用測試套件,首先我們需要先建立一個類,透過@Suite註解標識該類為測試套件類(而不是測試類)

在開始操作前,我們需要對Junit5進行配置suite:

原因:單元測試中有部分是不希望自動執行的,僅有部分單元測試希望在內網http://10.0.0.65/ 伺服器上自動執行,因此希望配置suite 以解決部分執行問題。

(junit5 低版本中沒有suite,目前我們springboot預設帶的junit5 需要升級)

為什麼要使用suite?(使用suite的好處)

  • 單元測試可分組管理
  • 進行測試間的編排順序


suite的使用方法:(在pom中配置suite)

學會配置suite之後,Java中的大部分註解都可以用以下方法進行配置!

1. 在web 應用中引入junit5

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
          <version>5.8.2</version>
        <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

2. 引入suite的包

<dependency>
  <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-api</artifactId>
      <scope>test</scope>
        </dependency>
        <dependency>
      <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-engine</artifactId>
</dependency>

3. 程式碼使用suite

package com.wdtrip.wdpromotion;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({TestCustomPage.class,
TestEbkActivity.class
})
public class TestSuiteOne {
}

4. 在pom檔案的build中配置需要執行的suite

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <includes>
      <include>com.wdtrip.wdpromotion.TestSuiteOne</include>
    </includes>
  </configuration>
</plugin>

 


總結不易,希望uu們不要吝嗇親愛的?喲(^U^)ノ~YO!!如有問題,歡迎評論區批評指正?

相關文章