JUnit 之初體驗

文章目錄

    • 1.定義
    • 2.引入
      • 1)使用 Maven 工具
      • 2)使用 Gradle 工具
      • 3)使用 Jar 包
    • 2.樣例
      • 0)前提
      • 1)測試類
      • 2)測試方法
      • 3)測試斷言
      • 4)實施
    • 總結

1.定義

JUnit 是一個流行的 Java 單元測試框架,用于編寫和執行測試。它提供了一組注解斷言,使得單元測試的編寫變得簡單且直觀

程序開發過程中,不變的永遠是變化!

因此,單元測試極為重要!通過使用我們所編寫的 JUnit 測試用例來驗證代碼的正確性,并且還可以確保代碼在之后的修改或重構后仍然能夠正常工作。

2.引入

在 Java 項目中引入 JUnit 主要有以下幾種常用的方式

1)使用 Maven 工具

在 Maven 項目的 pom.xml 文件中添加 JUnit 依賴

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version> <!-- 自己選擇需要的版本 --><scope>test</scope></dependency>
</dependencies>

2)使用 Gradle 工具

在 Gradle 項目的 build.gradle 文件中添加 JUnit 依賴

testImplementation 'junit:junit:4.13.2' // 自己選擇需要的版本

3)使用 Jar 包

需要手動下載 JUnit Jar 包(可以從 JUnit 官方網站下載)并添加到項目的類路徑下

JUnit 官網下載地址:

  • JUnit4:https://junit.org/junit4/
  • JUnit5:https://junit.org/junit5/

2.樣例

編寫 測試用例 的基本流程 大概是:創建一個 測試類 =》編寫N組 測試方法 =》編寫N組 斷言

在這里插入圖片描述

接下來就讓我們逐一認識一下吧!

0)前提

想要測試嘛!肯定要有需要測試的代碼呀 (此處選擇使用了 Maven 導入 JUnit)
在這里插入圖片描述

Demo 類中存在了兩個方法,分別是用于加法運算的 add 以及 用于減法運算的 sub

class Demo {public int add(int a, int b) {return a + b;}public int sub(int a, int b) {return a - b;}
}

1)測試類

在 JUnit 中,測試用例通常以一個包含測試方法的測試類為單位

測試類是一個普通的 Java 類,其中包含了一個或多個使用 @Test 注解標記的測試方法

2)測試方法

測試方法用 @Test 注解進行標記,這告訴 JUnit 這是一個測試方法。測試方法包含用于驗證代碼行為的斷言

3)測試斷言

在 JUnit 中提供了一組斷言方法,用于驗證預期結果是否符合實際結果。例如,assertEquals(expected, actual) 用于比較預期值和實際值是否相等

4)實施

點擊代碼左側的 綠色運行按鈕 ,然后點擊 Run xxxx 即可。也可以在代碼區內點擊 鼠標右鍵 然后 Run xxxx

說明,這種點擊就是運行當前類的全部測試方法,也可以單獨運行指定的測試方法

示例代碼:

在這里插入圖片描述

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;class MyFirstJUnitJupiterTests {private final Demo demo = new Demo();@Testvoid add() {assertEquals(2, demo.add(1, 1));}@Testvoid sub() {assertEquals(4, demo.sub(5, 1));}
}

這里使用的 assertEquals(expected, actual) 是驗證預期值和實際值是否相等

運行結果:

1)正常結果

在這里插入圖片描述

可以看到 兩個方法都是 綠色?,說明其正確。

2)異常結果

修改一下 sub 方法的期待結果,將其結果故意修改為錯誤值 3

@Test
void sub() {assertEquals(3, demo.sub(5, 1));
}

在這里插入圖片描述

可以看到 第一個方法 add 是綠色?,而第二個方法 sub 則是 黃色 X 說明其錯誤

總結

這樣我們就使用 JUnit 這個流行的 Java 單元測試框架編寫了第一個單元測試用例啦!JUnit 提供的方法還有很多,此處只是簡單的使用了 @TestassertEquals ,它還擁非常多的功能待我們去研究及運用。

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

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

相關文章

H5ke14--1--拖放

介紹drag,drop 一.被拖動元素,目標(釋放區) 元素要設置dragable屬性:true,false,auto 被拖動元素上面有三個事件,drag,dragend,按下左鍵,移動種,鼠標松,這三個事件一般只用獲取我們的被拖動元素 冒泡:event是可以繼承的,mouseevent鼠標事件,dragevent拖放事件,前面都是一個…

ubuntu 修改系統時間,解決更新軟件報錯問題

ubuntu在更新軟件時出現E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease 錯誤 網上解決方法一&#xff1a;修改系統時間 修改時區 timedatectl set-timezone Asia/Shanghai 查看當前時間 date -R date -s “2023-12-5 15:57:15” 查看…

C++11多線程基本知識點

文章目錄 進程和線程的概念進程和線程的區別 C多線程的基本內容創建線程std::thread線程IDstd::thread對象生命周期和線程等待和分離線程參數傳遞引用類型成員函數作為線程入口和線程基類的封裝lambda臨時函數作為線程入口函數lambda函數lambda線程 多線程同步和通信多線程通信…

Python基礎(一、安裝環境及入門)

一、安裝 Python 訪問 Python 官方網站 并點擊 "Downloads"&#xff08;下載&#xff09;。 在下載頁面中&#xff0c;你會看到最新的 Python 版本。選擇與你的操作系統相對應的 Windows 安裝程序并下載。 雙擊下載的安裝程序&#xff0c;運行安裝向導。 在安裝向…

$(this) 和 this 關鍵字在 jQuery 中有何不同?

在jQuery中&#xff0c;$(this)是一個特殊的語法&#xff0c;用于使用jQuery庫中的函數和方法來操作當前選擇的元素。這個語法將原生的JavaScript "this" 對象包裝成一個jQuery對象&#xff0c;使開發者可以使用jQuery提供的豐富功能來處理當前元素。 而在一般的Java…

Redis KEY*模糊查詢導致速度慢、阻塞其他 Redis 操作

Redis KEY*模糊查詢導致交互速度慢、阻塞其他 Redis 操作 查詢速度慢的原因 在Redis中&#xff0c;使用通配符 KEYS 命令進行鍵的模糊匹配&#xff08;比如 KEYS key*&#xff09;可能會導致性能問題&#xff0c;尤其是在數據集較大時。這是因為 KEYS 命令的實現需要遍歷所有…

多個大模型高效部署平臺的實戰教程

大家好,我是herosunly。985院校碩士畢業,現擔任算法研究員一職,熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名,CCF比賽第二名,科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的見解。曾經輔導過若干個非計算機專業的學生進入到算法…

mybatis和mybatisplus中對 同namespace 中id重復處理邏輯源碼解析

一、背景 同事在同一個mapper.xml &#xff08;namespace相同&#xff09;&#xff0c;復制了一個sql沒有修改id&#xff0c;正常啟動項目。但是我以前使用mybatis的時候如果在namespace相同情況下&#xff0c;id重復&#xff0c;項目會報錯無法正常啟動&#xff0c;后來看代碼…

用戶帳戶限制(例如,時間限制)會阻止你登錄。請與系統管理員或技術支持聯系以獲取幫助。

用戶帳戶限制(例如&#xff0c;時間限制)會阻止你登錄。請與系統管理員或技術支持聯系以獲取幫助。 在Windows11遠程連接Windows10時提示【用戶帳戶限制(例如&#xff0c;時間限制)會阻止你登錄。請與系統管理員或技術支持聯系以獲取幫助。】我們該如何解決&#xff1a; 1、在…

React聚焦渲染速度

目錄 一、引言 二、React.js的渲染速度機制 虛擬DOM Diff算法 三、優化React.js的渲染速度 避免不必要的重新渲染 使用合適的數據結構和算法 使用React Profiler工具進行性能分析 四、實際案例分析 五、總結 一、引言 在當今的Web開發領域&#xff0c;React.js無疑是…

C語言——螺旋矩陣(注釋詳解)

一、前言&#xff1a; 螺旋矩陣是指一個呈螺旋狀的矩陣&#xff0c;它的數字由第一行開始到右邊不斷變大&#xff0c;向下變大&#xff0c;向左變大&#xff0c;向上變大&#xff0c;如此循環。 二、市面解法&#xff08;較難理解,代碼長度短&#xff09;&#xff1a; 根據階數…

【ARMv8 SIMD和浮點指令編程】浮點數據轉換指令——數據類型互轉必備

浮點數據轉換指令包括不同的浮點精度數之間的轉換,還包括整型和浮點數之間的轉化。 在了解數據轉換指令前,必須學習 IEEE 754 定義的五種舍入規則。前兩條規則舍入到最接近的值,其他的稱為定向舍入: 舍入到最接近的值 Round to nearest, ties to even – rounds to the n…

Python 多線程和多進程并發執行

Python 多線程和多進程并發執行 引言多線程主要特點和概念多線程的使用threading 模塊concurrent.futures 線程池 多進程主要特點和概念&#xff1a;多進程的使用&#xff1a;multiprocessing 模塊concurrent.futures 進程池 選擇合適的進程數 總結I/O 密集型任務CPU 密集型任務…

js過濾的方法示例

以下是幾個常用的 JavaScript 過濾方法示例&#xff1a; filter() filter() 方法創建一個新的數組&#xff0c;其中包含通過測試函數的所有元素。該方法不會改變原始數組。 const numbers [1, 2, 3, 4, 5]; const filteredNumbers numbers.filter(num > num > 3); c…

銷售技巧培訓之如何提高建材銷售技巧

建材銷售市場競爭也日趨激烈。在這個充滿挑戰與機遇的市場中&#xff0c;掌握一定的銷售技巧對于一個建材銷售人員來說至關重要。本文將結合實際案例&#xff0c;探討一些實用的建材銷售技巧&#xff0c;幫助你更好地拓展業務。 一、了解客戶需求 在銷售過程中&#xff0c;首先…

sql2005日志文件過大如何清理

由于安裝的時候沒有計劃好空間&#xff0c;默認裝在系統盤&#xff0c;而且又沒有做自動備份、截斷事務日志等&#xff0c;很快LDF文件就達到十幾G&#xff0c;或者幾十G &#xff0c;此時就不得不處理了。 備份和計劃就不說了&#xff0c;現在就說下怎么把它先刪除吧&#xf…

【深度學習】一維數組的 K-Means 聚類算法理解

剛看了這個算法&#xff0c;理解如下&#xff0c;放在這里&#xff0c;備忘&#xff0c;如有錯誤的地方&#xff0c;請指出&#xff0c;謝謝 需要做聚類的數組我們稱之為【源數組】 需要一個分組個數K變量來標記需要分多少個組&#xff0c;這個數組我們稱之為【聚類中心數組】…

mysql中count(*)、count(1)、count(主鍵)、count(字段)的區別

文章目錄 count函數的語義count(主鍵)count(1)count(*)count(字段)替代方案explain或者show table status中間表或者其他數據庫計數 以下分析都是基于 select count(?) from table 這個語句來分析&#xff0c;不帶過濾條件。 count函數的語義 count() 是一個聚合函數&#x…

BFC(Block Formatting Contexts)塊級格式化上下文

塊格式化上下文&#xff08;block formatting context&#xff09; 是頁面上的一個獨立的渲染區域&#xff0c;容器里面的子元素不會在布局上影響到外面的元素。它是決定塊盒子的布局及浮動元素相互影響的一個因素。 下列情況將創建一個塊格式化上下文&#xff1a; 使用float…

阿里云輕量應用服務器與云服務器ECS對比

與云服務器ECS相比&#xff0c;輕量應用服務器使用門檻較低&#xff0c;配置簡便&#xff0c;能讓您快速上手并部署簡單的應用或網站&#xff0c;更適合個人開發者、學生等用戶。本文介紹輕量應用服務器與云服務器ECS的特點和區別。 產品對比 輕量應用服務器與云服務器ECS的產…