【單元測試】

一、框架

不同的編程語言有不同的測試框架,以下是一些常見的測試框架:

1)Java:JUnit、TestNG2)Python:unittest、pytest3)JavaScript:Jest、Mocha4)C#:NUnit、xUnit5)C++:Google Test

二、編寫單元測試的步驟

1、確定測試目標

首先,明確你要測試的函數或方法的功能。例如,一個函數的目的是計算兩個數的和,那么測試目標就是驗證這個函數在各種輸入下都能正確返回結果。

?2、編寫測試用例

  • 正常輸入:測試函數在正常輸入下的行為。例如,對于加法函數,輸入兩個正數、兩個負數、一個正數一個負數等。

  • 邊界輸入:測試函數在邊界條件下的行為。例如,輸入最大值、最小值、零等。

  • 異常輸入:測試函數在異常輸入下的行為。例如,輸入非法類型(如字符串代替數字)、空值等。

  • 特殊輸入:測試函數在特殊條件下的行為。例如,輸入兩個相同的數、輸入兩個相反數等。

3、編寫測試代碼(用例開發)?

  • 使用測試框架提供的語法和功能編寫測試代碼。以下是2個簡單的例子:

1)示例:Python 中的單元測試

假設有一個函數 add,用于計算兩個數的和:

Python復制

def add(a, b):return a + b

使用 unittest 框架編寫單元測試:

Python復制

import unittestclass TestAddFunction(unittest.TestCase):def test_add_positive_numbers(self):self.assertEqual(add(2, 3), 5)def test_add_negative_numbers(self):self.assertEqual(add(-1, -1), -2)def test_add_zero(self):self.assertEqual(add(0, 0), 0)def test_add_mixed_numbers(self):self.assertEqual(add(-1, 1), 0)def test_add_with_non_numeric_input(self):with self.assertRaises(TypeError):add("a", 1)if __name__ == '__main__':unittest.main()
2)示例:Java 中的單元測試

假設有一個類 Calculator,其中有一個方法 add

java復制

public class Calculator {public int add(int a, int b) {return a + b;}
}

使用 JUnit 框架編寫單元測試:

java復制

import static org.junit.Assert.assertEquals;
import org.junit.Test;public class CalculatorTest {@Testpublic void testAddPositiveNumbers() {assertEquals(5, new Calculator().add(2, 3));}@Testpublic void testAddNegativeNumbers() {assertEquals(-2, new Calculator().add(-1, -1));}@Testpublic void testAddZero() {assertEquals(0, new Calculator().add(0, 0));}@Testpublic void testAddMixedNumbers() {assertEquals(0, new Calculator().add(-1, 1));}
}

三、運行單元測試

  • 運行測試:使用測試框架提供的工具運行測試。例如,在 Python 中可以運行 unittest.main(),在 Java 中可以使用 IDE 的測試運行功能。

  • 檢查結果:確保所有測試用例都通過。如果有測試失敗,需要檢查代碼并修復問題。

四、維護單元測試

  • 更新測試用例:當代碼發生變化時,需要更新測試用例以確保測試的完整性。

  • 持續集成:將單元測試集成到持續集成(CI)流程中,確保每次代碼提交都能自動運行測試。

五、最佳實踐(單測的應用)

  1. 測試覆蓋率盡量提高測試覆蓋率,確保代碼的每個分支和邏輯都被測試到。

  2. 獨立性:每個測試用例應該是獨立的,不依賴于其他測試用例。

  3. 可讀性:測試代碼應該清晰易懂,便于維護。

  4. 自動化將單元測試集成到自動化測試流程中,確保每次代碼提交都能自動運行測試。

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

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

相關文章

機器學習——XGBoost

XGBoost(極度梯度提升樹,eXtreme Gradient Boosting)是基于GBDT的優化模型,其最大特性在于對GBDT的損失函數展開到二階導數,使得其梯度提升樹模型更接近其真實損失 其XGBoost分類樹擬合和預測方法的基本思路為: 遍歷所有的樹&…

響應“一機兩用”政策 ,實現政務外網安全

在數字化辦公的浪潮下,企業與政務機構面臨著既要保障數據安全,又要高效訪問互聯網的雙重需求。“一機兩用”成為解決這一難題的關鍵。 政策驅動,需求迫切 隨著《網絡安全法》《數據安全法》等法律法規的相繼出臺,網絡安全防護的要…

【后端】【Django】Django DRF API 單元測試完整方案(基于 `TestCase`)

Django DRF API 單元測試完整方案(基于 TestCase) 一、方案概述 使用 django.test.TestCase 和 rest_framework.test.APIClient 進行 API 單元測試,確保 API 正確性、權限控制、數據返回格式、業務邏輯 等。 二、基本步驟 使用 setUp() 初始…

文生圖語義識別插件使用(controlnet)

1. 插件下載(github) https://github.com/Mikubill/sd-webui-controlnet https://github.com/lllyasviel/ControlNet2. 模型下載(hugging face) https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download https://huggingface.co/bdsqlsz/qinglong_controlnet-l…

學者觀察 | web3.0產業發展與技術融合——北京大學研究員肖臻

導語 肖臻老師認為在未來很長一段時間內,Web 3.0將和現在的Web 2.0共存。Web 3.0和人工智能(AI)的融合發展前景非常廣闊,Web 3.0致力于打造去中心化的互聯網生態系統,賦予用戶更大的數據所有權和控制權,而…

【模型壓縮+推理加速】知識蒸餾綜述解讀

知識蒸餾綜述解讀 論文: https://arxiv.org/abs/2006.05525 最近Deepseek R1的技術報告中,訓練部分提到使用了知識蒸餾,就像系統性的看看蒸餾算法的原理。看了很多的博客,很多都沒有詳細把知識蒸餾系統的講清楚。我們還是讀一下…

vivo 湖倉架構的性能提升之旅

作者:郭小龍 vivo互聯網 大數據高級研發工程師 導讀:本文整理自 vivo互聯網 大數據高級研發工程師 郭小龍 在 StarRocks 年度峰會上的分享,聚焦 vivo 大數據多維分析面臨的挑戰、StarRocks 落地方案及應用收益。 在 即席分析 場景&#xff0c…

代碼隨想錄算法訓練營第十四天| 226.翻轉二叉樹、101. 對稱二叉樹、104.二叉樹的最大深度、111.二叉樹的最小深度

今日題目 226.翻轉二叉樹 題目鏈接:226. 翻轉二叉樹 - 力扣(LeetCode) 思考:翻轉二叉樹,就是對每一個根節點,都交換左右節點,左右節點進入遞歸繼續交換它們的左右節點。 代碼: # De…

Java設計模式--單例模式

單例模式(構造器私有) 單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一,有以下特點: 單例類只能有一個實例。 單例類必須自己創建自己的唯一實例。 單例類必須給所有其他對象提供這一實例。 反射可以破壞單例模式…

2025年如何避免使用驗證碼求解器時被IP封禁

引言 2025年,驗證碼求解器已成為自動化網絡抓取和其他在線流程的關鍵工具。然而,自動化用戶面臨的一個常見挑戰是IP封禁。當網站檢測到自動化活動時,通常會阻止發出請求的IP地址,導致驗證碼挑戰無法解決。本文將探討使用驗證碼求…

JVM詳解(包括JVM內存模型與GC垃圾回收)

📖前言: 學會使用Java對于一個程序員是遠遠不夠的。Java語法的掌握只是一部分,另一部分就是需要掌握Java內部的工作原理,從編譯到運行,到底是誰在幫我們完成工作的? 接下來著重對Java虛擬機,也就…

【無標題】大亞灣文化體育場多美啊。

請推薦一些常用并且免費的,可直接在線運行【Python】代碼的平臺并列出對應網址 好的,用戶想讓我推薦一些常用且免費的、可以直接在線運行Python代碼的平臺,并且需要列出對應的網址。我需要先回想一下自己知道的在線Python運行環境&#xff0…

權限提升—Windows權限提升土豆家族溢出漏洞通殺全系

前言 OK,Java安全更新不下去了,實在是太難啦啊,想起來提權這一塊沒怎么更新過,接下來都主要是更新提權這一塊的文章了,Java安全的話以后有耐心再搞了。 手動提權 今天主要是講這個手動的提權,手動提權相…

Vue3 知識點總結

Vue3 知識點總結 1. 核心概念 1.1 Composition API 1.1.1 setup 函數 setup是Vue3中的新的配置項,是組件內使用Composition API的入口在setup中定義的變量和方法需要return才能在模板中使用setup執行時機在beforeCreate之前,this不可用 export defa…

python --face_recognition(人臉識別,檢測,特征提取,繪制鼻子,眼睛,嘴巴,眉毛)/活體檢測

dlib 安裝方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 環境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人臉檢測 import cv2 import face_recognition# 讀取人臉圖片 img cv2.imread(r"C:\Users\123\…

【bug】[42000][1067] Invalid default value for ‘xxx_time‘

MySQL錯誤解決:Invalid default value for xxx_time’問題分析與修復方案 問題描述 在MySQL數據庫操作中,當嘗試創建或修改表結構時,可能會遇到以下錯誤信息: [bug] [42000][1067] Invalid default value for xxx_time這個錯誤…

Go環境相關理解

Linux上安裝的環境變量 ## set go env export GOPATH$HOME/go_workspace export GOPATH/usr/local/go export PATH$PATH:$GOPATH/bin go.mod 和go.sum的理解 go.mod文件 ?go.mod文件定義了模塊的路徑和依賴版本?。它遵循 語義化版本2.0.0規范,記錄了當前項目所依…

Next.js 深度解析:全棧React框架的架構哲學與實踐精髓

Next.js 作為 React 生態中最流行的全棧框架,已經超越了簡單的SSR工具,發展成為完整的Web開發解決方案。以下從八個維度進行深度剖析: 一、核心架構設計 雙引擎驅動模型 頁面路由系統:基于文件系統的約定式路由渲染引擎&#xff…

禾賽盈利了,但激光雷達沒有勝利

還遠沒有到激光雷達黨歡呼的時候。 3月,隨著禾賽科技公布2024年報,全世界第一家也是唯一一家實現全年盈利的激光雷達上市公司誕生,為了這個盈利目標,禾賽科技奮斗了十年。 但極大的出貨量和不高的盈利水平,讓禾賽科技…

心房顫動新機制:ATM/p53通路早期抑制

急性心肌梗死(AMI)是心血管疾病中的“大魔頭”,它悄無聲息地侵蝕著心臟的肌肉,導致心臟功能受損,嚴重時甚至危及生命。而心房顫動(AF),這一常見的心律失常,往往在AMI后悄…