單元測試知識總結

🍅?點擊文末小卡片?,免費獲取軟件測試全套資料,資料在手,漲薪更快??

一、什么是單元測試?

單元測試是指,對軟件中的最小可測試單元在與程序其他部分相隔離的情況下進行檢查和驗證的工作,這里的最小可測試單元通常是指函數或者類;單元測試屬于最嚴格的軟件測試手段,是最接近代碼底層實現的驗證手段,可以在軟件開發的早期以最小的成本保證局部代碼的質量。另外,單元測試都以自動化的方式執行,所以在大量回歸測試的場景下執行單元測試,更能提高測試效率,另外,也可以幫助開發工程師改善代碼的設計與實現。

代碼的基本特征:

單元測試的對象是代碼,代碼的開發語言多種多樣,程序的功能也千變萬化,但是其基本特征還是順序執行、條件分支、循環處理和函數調用等最基本的邏輯控制。

代碼產生錯誤的原因:

如果有代碼分類遺漏,就會產生缺陷;如果代碼分類錯誤,也會產生缺陷;如果代碼分類正確也沒有遺漏,但是代碼分類時的處理邏輯錯誤,也同樣會產生缺陷。在具體的工程實踐中,開發工程師為了設計并實現邏輯功能正確的代碼,通常會有如下的考慮過程。

1、如果要實現正確的邏輯功能,會有哪幾種正常的輸入?
2、是否有需要特殊處理的多種邊界輸入?
3、各種非法輸入的可能性有多大?如何處理?

這里,黑盒測試的“等價類”,這些開發工程師眼中的代碼“功能點”,就是單元測試(白盒測試)的“等價類”。

二、單元測試用例

單元測試的用例是一個“輸入數據”和“預期輸出”的集合;測試人員需要針對確定的輸入,根據邏輯功能推算出預期正確的輸出,并且以執行被測試代碼的方式進行驗證。輸入數據不僅僅是函數的入參,同樣輸出數據也不僅僅是函數的返回值那么簡單。

輸入數據:
? ? ? ? 1、被測函數的輸入參數;
? ? ? ? 2、被測函數內部需要讀取的全局靜態變量;
? ? ? ? 3、被測函數內部需要讀取的成員變量;
? ? ? ? 4、在函數內部調用子函數獲得的數據;
? ? ? ? 5、在函數內部調用子函數改寫的數據;
? ? ? ? 6、嵌入式系統中,在中斷調用時改寫的數據:
? ? ? ? 。。。。。。

預期輸出:
? ? ? ? 1、被測函數的返回值;
? ? ? ? 2、被測函數的輸出參數;
? ? ? ? 3、被測函數所改寫的成員變量:
? ? ? ? 4、被測函數所改寫的全局變量;
? ? ? ? 5、被測函數中進行的文件更新;
? ? ? ? 6、被測函數中進行的數據庫更新:
? ? ? ? 7、被測函數中進行的消息隊列更新:
? ? ? ? 8、被測試函數中調用的其他函數:
? ? ? ? 。。。。。。

三、驅動代碼與樁代碼

驅動代碼指調用被測函數的代碼;在單元測試中,驅動模塊通常包括調用被測函數前的數據準備、調用被測函數以及驗證結果三個步驟。
樁代碼是用來代替真實代碼的臨時代碼;如某個函數A調用一個尚未完成的函數B,為了對函數A的邏輯進行測試,模擬一個函數B,B就是樁代碼。為了實現對A的全路徑覆蓋,需要控制不同測試用例中函數B的返回值。

樁代碼的編寫:
編寫樁代碼通常需要遵守的原則:

1、樁函數要具有與原函數完全相同的原型,僅僅內部實現不同,這樣測試代碼才能正確鏈接到樁函數。
2、用于實現隔離和補充的樁函數比較簡單,只須保持原函數的聲明,并加一個空的實現即可,目的是通過編譯和鏈接。
3、實現控制功能的樁函數是應用最廣泛的,要根據測試用例的需要,輸出合適的數據作為被測函數的內部輸入。

四、單元測試的自動化

單元測試階段的“自動化”內涵不僅指測試用例執行的自動化,還包含以下方面:
? ? ? ? 1、測試用例框架代碼的自動生成;
? ? ? ? 2、部分測試輸入數據的自動生成;
? ? ? ? 3、樁代碼的自動生成;
? ? ? ? 4、被測代碼的自動靜態分析;
? ? ? ? 5、測試覆蓋率的自動統計與分析;
? ? ? ? 6、單元測試用例的自動執行。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

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

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

相關文章

python爬蟲筆記(一)

文章目錄 html基礎標簽和下劃線無序列表和有序列表表格加邊框 html的屬性a標簽(網站)target屬性換行線和水平分割線 圖片設置寬高width,height html區塊——塊元素與行內元素塊元素與行內元素塊元素舉例行內元素舉例 表單from標簽type屬性pla…

【mysql】centOS7安裝mysql詳細操作步驟!—通過tar包方式

【mysql】centOS7安裝mysql詳細操作步驟! linux系統安裝mysql版本 需要 root 權限,使用 root 用戶進行命令操作。使用tar文件包,安裝,gz包也可以但是還需要配置用戶,tar包雖然大,但是全啊! 1. …

[新能源]新能源汽車快充與慢充說明

接口示意圖 慢充接口為交流充電口(七孔),快充接口為直流充電口(九孔)。 引腳說明 上圖給的是充電口的引腳圖,充電槍的為鏡像的。 慢充接口引腳說明 快充接口引腳說明 充電流程 慢充示意圖 慢充&…

Android第二次面試總結(項目拷打理論篇)

(一)理論基礎 LiveData 和 ViewModel 是 Android 架構組件中的重要部分,它們在構建響應式、生命周期感知的 Android 應用程序中發揮著關鍵作用。下面分別介紹它們的原理。 LiveData 原理 1. 概述 LiveData 是一種可觀察的數據持有者類&…

MyBatis SqlSessionFactory 是如何創建的?

SqlSessionFactory 是 MyBatis 的核心接口之一,它是創建 SqlSession 實例的工廠。 SqlSession 實例是 MyBatis 與數據庫交互的主要接口,負責執行 SQL 語句、管理事務等。 SqlSessionFactory 的創建過程主要由 SqlSessionFactoryBuilder 類負責。 SqlSes…

玩轉python:通俗易懂掌握高級數據結構-collections模塊之Counter

引言 Counter是Python中collections模塊提供的一個強大工具,用于統計可哈希對象的出現次數。它非常適合用于頻率統計、詞頻分析、數據聚合等場景。本文將詳細介紹Counter的關鍵用法和特性,并通過8個豐富的案例幫助讀者掌握其應用。 關鍵用法和特性表格 …

DeepSeek面試——分詞算法

DeepSeek-V3 分詞算法 一、核心算法:字節級BPE(Byte-level BPE,BBPE) DeepSeek-V3 采用 字節級BPE(BBPE) 作為核心分詞算法,這是對傳統 BPE(Byte Pair Encoding)算法的…

機器學習——正則化、欠擬合、過擬合、學習曲線

過擬合(overfitting):模型只能擬合訓練數據的狀態。即過度訓練。 避免過擬合的幾種方法: ①增加全部訓練數據的數量(最為有效的方式) ②使用簡單的模型(簡單的模型學不夠,復雜的模型學的太多&am…

Python:函數(一)

python函數相關的知識點 1. 函數定義與調用 定義:使用 def 關鍵字,后接函數名和參數列表。 def greet(name):"""打印問候語(文檔字符串)"""print(f"Hello, {name}!") 調用&#xff1a…

關于Flutter中兩種Widget的生命周期詳解

目錄 一、StatelessWidget 生命周期 二、StatefulWidget 生命周期 1. 創建階段 2. State初始化階段 3. 構建階段 4. 更新階段 5. 銷毀階段 三、核心對比與常見陷阱 四、面試回答技巧 以下是Flutter中兩種核心Widget(StatelessWidget和StatefulWidget)生命周…

Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主機名

進入目錄 /etc/netplan 修改 50-cloud-init.yaml 》保存文件后,執行以下命令應用更改: sudo netplan apply 》》 DHCP模式 修改主機名 hostnamectl set-hostname xxxx 修改cloud.cfg 防止重啟主機名還原 但測試下來 不修改, 重啟 也不會還…

C++基礎 [三] - 面向對象三

初始化列表 首先,初始化列表是我們的祖師爺本賈尼博士為了解決在某些成員變量在定義時必須初始化的情況。這個初始化列表其實發生在構造函數之前,也就是實例化整個對象時先對所有的成員都進行了初始化 初始化的概念區分 在之前的博客學習中&#xff…

55年免費用!RevoUninstaller Pro專業版限時領取

今天,我要給大家介紹一款超給力的卸載工具——RevoUninstaller Pro。這是一款由保加利亞團隊精心打造的專業級卸載軟件,堪稱軟件卸載界的“神器”。 RevoUninstaller分為免費版和專業版。專業版功能更為強大,但通常需要付費才能解鎖全部功能。…

目前人工智能的發展,判斷10年、20年后的人工智能發展的主要方向,或者帶動的主要產業

根據2025年的最新行業研究和技術演進趨勢,結合歷史發展軌跡,未來10-20年人工智能發展的主要方向及帶動的產業將呈現以下六大核心趨勢: 一、算力革命與底層架構優化 核心地位:算力將成為類似“新能源電池”的基礎設施,…

【機器人】復現 ASGrasp 通用透明物體重建、6-DoF抓取預測

在機器人抓取領域,透明和鏡面物體的抓取一直是個難題。 ASGrasp核心是兩層學習型立體網絡,能夠同時恢復透明和鏡面物體的可見部分和不可見部分的深度信息。 然后融合兩層深度信息,進行重建物體,得到點云信息作為GSNet&#xff0…

2. qt寫帶有槽的登錄界面(c++)

我們在1.Qt寫簡單的登錄界面(c)_c qt 設計一個簡單界面-CSDN博客中寫了個簡單的登錄界面&#xff0c;但沒有槽&#xff0c;在這里寫一個帶有槽的界面。 1.代碼 代碼目錄如下&#xff1a; main.cpp的代碼如下&#xff1a; #include "MainWindow.h" #include <Qt…

windows安裝兩個或多個JDK,并實現自由切換

我用兩個JDK來做演示&#xff0c;分別是JDK8和JDK17(本人已安裝JDK8&#xff0c;所以這里只演示JDK17的安裝)。 1、下載JDK17安裝 Java Downloads | Oracle 2、安裝JDK17,這里忽略。直接雙擊軟件&#xff0c;點擊下一步就可以。 3、配置環境變量 在系統變量中新建一個CLASSP…

【2025最新】深度學習框架PyTorch——從入門到精通(1)下載與安裝

又名&#xff1a;蕪湖起飛俠的PyTorch學習記錄——從起飛到墜毀 簡介安裝內容總覽安裝AnacondaAnaconda簡介Anaconda下載配置環境變量驗證其他配置安裝matplotlib 安裝 CUDA安裝之前安裝cuDNN 安裝torchCPU 版本安裝GPU 版本安裝通過pip安裝&#xff08;不推薦&#xff09;通過…

C++數據結構1——棧結構詳解

一、棧的基本概念與特性 1. 棧的定義與特點 棧&#xff08;Stack&#xff09;是一種遵循后進先出&#xff08;LIFO, Last In First Out&#xff09;原則的線性數據結構&#xff0c;其核心特征包括&#xff1a; 單端操作&#xff1a;所有操作僅通過棧頂進行 動態存儲&#xf…

【Python 數據結構 15.哈希表】

目錄 一、哈希表的基本概念 1.哈希表的概念 2.鍵值對的概念 3.哈希函數的概念 4.哈希沖突的概念 5.常用的哈希函數 Ⅰ、直接定址法 Ⅱ、平方取中法 Ⅲ、折疊法 Ⅳ、除留余數法 Ⅴ、位與法 6.哈希沖突的解決方案 Ⅰ、開放定址法 Ⅱ、鏈地址法 7.哈希表的初始化 8.哈希表的元素插…