在 IntelliJ IDEA 中使用 JUnit 進行單元測試

1. 介紹 JUnit

JUnit 是 Java 語言中最流行的單元測試框架之一。它基于 xUnit 設計模式,支持 測試自動化、斷言(Assertions)和測試生命周期管理,是 Java 開發中進行 TDD(測試驅動開發) 的重要工具。

JUnit 主要特點:

  • 輕量級:不需要復雜的配置即可使用。
  • 自動化測試:支持 @Test 注解實現測試自動化。
  • 測試報告:與 Maven、Gradle 和 CI/CD 集成,生成測試報告。
  • 參數化測試:支持 @ParameterizedTest 進行數據驅動測試。
  • 兼容性:JUnit 5 兼容 JUnit 4/3,并提供 Vintage 組件用于向后兼容。

2. 安裝 JUnit(Maven 項目)

pom.xml 中添加 JUnit 5 依賴(推薦使用 junit-jupiter 聚合依賴):

<properties><junit.version>5.9.2</junit.version>
</properties><dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>${junit.version}</version><scope>test</scope></dependency>
</dependencies>

完整版本的 pom.xml 配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>MyTestJava</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><junit.version>5.9.2</junit.version>  <!-- 定義 JUnit 版本變量 --></properties><dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies></project>

然后刷新 Maven 依賴:

mvn clean install

也可以通過下面的方式刷新依賴:

刷新依賴


3. 編寫 JUnit 測試代碼

創建 APITest.java 并添加以下代碼:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;public class APITest {int add(int a, int b) {return a + b;}@Testvoid testAddition() {assertEquals(5, add(2, 3));assertEquals(-1, add(-2, 1));}
}

解釋:

  • @Test:標記為 JUnit 測試方法。
  • assertEquals(expected, actual):斷言 expectedactual 結果是否相等。

4. 運行 JUnit 測試

方法 1:使用 IntelliJ IDEA 運行

  1. 右鍵 APITest.java,選擇 Run 'APITest'
  2. 測試窗口 查看測試結果。

輸出測試結果

方法 2:使用 Maven 運行

在 IDEA 的 Terminal 運行:

mvn test

方法 3:在 CI/CD(如 GitHub Actions)中運行

- name: Run Testsrun: mvn test

5. JUnit 進階功能

5.1 斷言(Assertions)

JUnit 提供多種斷言方式:

@Test
void testAssertions() {assertTrue(3 > 2, "3 應該大于 2");assertFalse(2 > 3, "2 不應該大于 3");assertNull(null);assertNotNull("Hello");assertThrows(ArithmeticException.class, () -> { int x = 1 / 0; });
}

5.2 測試生命周期(Setup & Teardown)

JUnit 5 提供 @BeforeEach@AfterEach 進行 測試前后初始化和清理

import org.junit.jupiter.api.*;class TestLifecycle {@BeforeEachvoid setUp() {System.out.println("測試開始");}@Testvoid testSomething() {System.out.println("執行測試");}@AfterEachvoid tearDown() {System.out.println("測試結束");}
}

5.3 參數化測試

使用 @ParameterizedTest 進行 數據驅動測試

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;class ParameterizedExample {@ParameterizedTest@ValueSource(strings = {"JUnit", "TestNG", "Mockito"})void testWithParameters(String framework) {assertNotNull(framework);}
}

6. 解決 JUnit 運行時報錯問題

問題 1:ClassNotFoundException: org.junit.jupiter.api

原因:JUnit 依賴未正確解析。
解決方案

  • 檢查 pom.xml,確保 junit-jupiter 依賴存在。
  • 刷新 Maven 依賴(右鍵 pom.xmlReload Project)。

問題 2:TestEngine with ID ‘junit-jupiter’ failed to discover tests

原因:缺少 junit-jupiter-engine
解決方案

  • 直接使用 junit-jupiter 聚合依賴,避免單獨引入 junit-jupiter-api

問題 3:Maven 運行 mvn test 時報錯

解決方案

mvn clean test -U  # 強制更新依賴

7. 總結

步驟操作
安裝 JUnitpom.xml 添加 junit-jupiter 依賴
編寫測試代碼使用 @Test 方法進行斷言
運行測試IDEA 運行,或 mvn test
高級功能斷言、生命周期、參數化測試

使用 JUnit 5 + IntelliJ IDEA,可以輕松進行 Java 單元測試,提高代碼質量,并支持自動化測試!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72727.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單片機的發展

一、引言 單片機自誕生以來&#xff0c;經歷了四十多年的風風雨雨&#xff0c;從最初的工業控制逐步擴展到家電、通信、智能家居等各個領域。其發展過程就像是一場精彩的冒險&#xff0c;每一次技術的革新都像是在未知的海域中開辟新的航線。 二、單片機的發展歷程 &#xff…

常見的博弈模型有哪些

常見的博弈模型有哪些 目錄 常見的博弈模型有哪些**1. 重復博弈(Repeated Game)****2. 進化博弈論(Evolutionary Game Theory)****3. 機制設計(Mechanism Design)****4. 微分博弈(Differential Game)****5. 貝葉斯博弈(Bayesian Game)****6. 合作博弈(Cooperative G…

【MySQL-數據類型】數據類型分類+數值類型+文本、二進制類型+String類型

一、數據類型分類 二、數值類型 1.bit類型 測試環境ubuntu 基本語法&#xff1a; bit[(M)]&#xff1a;位字段類型&#xff0c;M表示每個值的位數&#xff0c;范圍從1&#xff5e;64&#xff1b;如果M被忽略&#xff0c;默認為1舉例&#xff1a; create table testBit(id i…

golang從入門到做牛馬:第一篇-我與golang的緣分,go語言簡介

還記得2018年的夏天,剛畢業的我不知道該做些什么,于是自學了一周的go語言,想要找一份go語言工作的代碼,當時的go還沒有go mod來管理依賴包,在北京找了一個月的工作,找到了一個小公司做了后端開發,當然使用go語言開發,帶著興奮勁,年輕身體也好,邊努力學習,邊工作。 時…

【數據庫】MySQL常見聚合查詢詳解

在數據庫操作中&#xff0c;聚合查詢是非常重要的一部分。通過聚合查詢&#xff0c;我們可以對數據進行匯總、統計和分析。MySQL提供了豐富的聚合函數來滿足不同的需求。本文將詳細介紹MySQL中常見的40個聚合函數及其使用場景&#xff0c;并通過8個的案例展示它們的用法。 一、…

調研:如何實現智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目錄 調研&#xff1a;如何實現智能分析助手&#xff08;Agent&#xff09;&#xff08;AutoCoder、FastGPT、AutoGen、DataCopilot&#xff09;一、交互流程二、數據流程三、架構分類四、開源產品4.1 AutoCoder&#xff08;知識庫變體&#xff09;4.2 FastGPT&#xff08;…

【Vue CLI腳手架開發】——6.scoped樣式

文章目錄 一、scoped是什么二、應用案例1.使用代碼2.原理3父組件App未添加scoped影響 一、scoped是什么 我們知道vue為了防止css樣式污染&#xff0c;在每個組件中提供了 scoped屬性進行限定css作用域&#xff1b;當<style>標簽有 scoped 屬性時&#xff0c;它的 CSS 只…

高精算法的用法及其優勢

高精度問題是指當數據的位數非常大&#xff08;超出標準數據類型的范圍&#xff09;時&#xff0c;如何進行計算和存儲的問題。常見場景包括大整數的加、減、乘、除、取模等操作。以下是解決高精度問題的常用方法與技巧&#xff1a; 一、數據存儲 數組存儲 用整型數組存儲&am…

VM+CentOS虛擬機

關于VMCentOS虛擬機的配置和使用&#xff0c;可以參考以下博客中的詳細教程&#xff1a; **一、VMCentOS虛擬機配置** 1. **虛擬機網絡配置** - 在VMware中&#xff0c;點擊“編輯”→“虛擬網絡編輯器”&#xff0c;選擇VMnet8并進行相關設置。 - 子網IP可以改成如192.168.1…

設置 CursorRules 規則

為什么要設置CursorRules&#xff1f; 設置 CursorRules 可以幫助優化代碼生成和開發流程&#xff0c;提升工作效率。具體的好處包括&#xff1a; 1、自動化代碼生成 &#xff1a;通過定義規則&#xff0c;Cursor 可以根據你的開發需求自動生成符合規定的代碼模板&#xff0c…

pip install速度太慢的多種解決方案

目錄 問題描述為什么 pip 速度這么慢&#xff1f;解決方案1. 使用國內鏡像源2. 配置多個鏡像源3. 使用第三方工具4. 手動下載后本地安裝5. 優化網絡環境6. 更新 pip 版本 測試效果 問題描述 在使用 Python 進行開發時&#xff0c;我們經常需要使用 pip 來安裝第三方庫。然而&am…

Java阻塞隊列深度解析:高并發場景下的安全衛士

一、阻塞隊列的核心價值 在電商秒殺系統中&#xff0c;瞬時涌入的10萬請求如果直接沖擊數據庫&#xff0c;必然導致系統崩潰。阻塞隊列如同一個智能緩沖帶&#xff0c;通過流量削峰和異步解耦兩大核心能力&#xff0c;成為高并發系統的核心組件。 二、Java阻塞隊列實現類對比 …

基于RapidOCR與DeepSeek的智能表格轉換技術實踐

基于RapidOCR與DeepSeek的智能表格轉換技術實踐 一、技術背景與需求場景 在金融分析、數據報表處理等領域&#xff0c;存在大量圖片格式的表格數據需要結構化處理。本文介紹基于開源RapidOCR表格識別與DeepSeek大模型的智能轉換方案&#xff0c;實現以下典型場景&#xff1a; …

django中視圖作用和視圖功能 以及用法

在 Django REST Framework(DRF)中,視圖(View)是處理 HTTP 請求并返回響應的核心組件。DRF 提供了多種視圖類,適用于不同的場景和需求。以下是 DRF 中常見的視圖類及其作用、使用方法的詳細說明: 一、DRF 視圖的分類 DRF 的視圖可以分為以下幾類: 基于函數的視圖(Func…

希音(Shein)前端開發面試題集錦和參考答案

用 Node 寫過什么工具或 npm 包 在實際開發中,使用 Node 編寫過多種實用工具和 npm 包。 自動化構建工具 開發了一個簡單的自動化構建工具,用于處理前端項目的資源壓縮和合并。在前端項目中,為了優化性能,需要對 CSS 和 JavaScript 文件進行壓縮,減少文件體積,同時將多個…

C語言100天練習題【記錄本】

C語言經典100題&#xff08;手把手 編程&#xff09; 可以在嗶哩嗶哩找到 已解決的天數&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六 下面的都是模模糊糊的 可以學學這些算法&#xff0c;我是算法白癡&#xff0c;但是我不是白癡&#xff0c;可以學&#xff…

迷你世界腳本文字板接口:Graphics

文字板接口&#xff1a;Graphics 彼得兔 更新時間: 2024-08-27 11:12:18 具體函數名及描述如下: 序號 函數名 函數描述 1 makeGraphicsText(...) 創建文字板信息 2 makeflotageText(...) 創建漂浮文字信息 3 makeGraphicsProgress(...) 創建進度條信息…

Crawl4AI: 賦能AI用戶的開源智能網頁爬蟲與數據提取

Crawl4AI: 賦能AI用戶的開源智能網頁爬蟲與數據提取 在當今人工智能時代&#xff0c;網絡爬蟲扮演著至關重要的角色。它們不僅是數據收集的強大工具&#xff0c;更是驅動機器學習、自然語言處理等技術發展的關鍵引擎。 然而&#xff0c;對于用戶來說&#xff0c;在面對復雜多…

下載b站視頻音頻

文章目錄 方案一&#xff1a;jjdown如何使用 方案二&#xff1a;bilibili嗶哩嗶哩下載助手如何使用進入插件網站插件下載插件安裝 使用插件下載視頻音頻&#xff1a;復制音頻下載地址 方案三&#xff1a;bat命令下載單個音頻下載單個視頻下載單個音視頻 方案一&#xff1a;jjdo…

【Git】linux搭建Gitea配置mysql數據庫

WindowsServer搭建內網Gitea【中文更方便使用】 1. 安裝Gitea # 下載 wget https://dl.gitea.io/gitea/1.23.5/gitea-1.23.5-linux-amd642. 創建用戶 # 創建 gitea 用戶 sudo adduser --system --shell /bin/bash --comment Git Version Control --create-home --home-dir /…