單元測試到底是什么?該怎么做?

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

一、什么是單元測試?

單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。至于“單元”的大小或范圍,并沒有一個明確的標準,“單元”可以是一個函數、方法、類、功能模塊或者子系統。

單元測試通常和白盒測試聯系到一起,如果單從概念上來講兩者是有區別的,不過我們通常所說的“單元測試”和“白盒測試”都認為是和代碼有關系的,所以在某些語境下也通常認為這兩者是同一個東西。還有一種理解方式,單元測試和白盒測試就是對開發人員所編寫的代碼進行測試。

提示:概念這個東西大概理解是什么意思即可~

在這里插入圖片描述

二、單元測試誰來做?

想一想:前面我們介紹了,單元測試簡單理解就是對開發人員所編寫的代碼進行測試,既然和代碼相關我們第一感覺那應該是“開發人員來做”;再一看單元測試包含“測試”兩個字,那么“測試人員來做”也應該是合理的吧。

單元測試一般是有開發人員或測試人員來做。誰來做并沒有一個絕對的標準,要根據公司的實際情況來決定。接下來我們分析一下開發人員或測試人員做單元測試的優缺點:

開發人員做單元測試:

優點:開發人員對代碼最熟悉,而且開發人員編程技能相對比較強,所以開發人員自己寫單元測試效率上和覆蓋率上都比較高

缺點:開發人員平時寫業務代碼就要花費很多時間,有時候確實沒有時間寫單元測試;而且大部分開發人員沒有太好的測試思想,單元測試可能只是寫個最簡單的用例就完了;自己寫的代碼自己測,往往都是不靠譜!

測試人員做單元測試:

優點:測試人員有比較系統的測試思想,可以更好地保證用例的覆蓋。而且通過寫單測測試能更好地了解具體代碼結構、流程,對于后續的業務測試也非常有利。

缺點:測試人員的編程技能相對比較弱,如果不同編程是無法開展單元測試的。并且測試人員對代碼沒有開發人員熟悉,效率會比較低。

圖片

三、單元測試怎么做?

動態執行跟蹤:就是把程序代碼運行起來,檢查實際的運行結果和預期結果是否一致

人工靜態檢查

人工靜態檢查包含的主要內容:

動態執行跟蹤

動態執行跟蹤需要編寫測試腳本調用業務代碼進行測試,為了更好的管理維護測試腳本,一般會采用單元測試框架來管理,不同的語言有不同的單元測試框架:

單元測試的一個重要的衡量標準就是代碼覆蓋率,盡量做到代碼的全覆蓋。常見單元測試覆蓋標準:

入門示例:針對開發人員編寫的實現計算操作的方法進行單元測試

# 開發人員編寫的業務代碼
class CalUtil:"""計算器"""@staticmethoddef add(x, y):"""加法"""return x + y@staticmethoddef sub(x, y):"""減法"""return x - y@staticmethoddef mul(x, y):"""乘法"""return x * y@staticmethoddef div(x, y):"""除法"""return x / y
# 單元測試腳本
import unittest
from test_ut.cal import CalUtilclass TestCal(unittest.TestCase):def test_add_01(self):# 測試數據x = 1y = 2expect = 3# 調用被測方法result = CalUtil.add(x, y)print(f"result={result}")# 斷言self.assertEqual(expect, result)def test_add_02(self):# 測試數據x = 1y = -1expect = 0# 調用被測方法result = CalUtil.add(x, y)print(f"result={result}")# 斷言self.assertEqual(expect, result)# ...

單元測試基本等同于白盒測試。

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

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

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

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

相關文章

PostgreSQL【應用 04】加解密擴展 pgcrypto 使用實例(加密、導出、導入、解密流程說明)

加解密擴展 pgcrypto 使用實例1.需求說明2.工具說明2.1 環境說明2.2 插件添加3.實例分析3.1 測試數據3.2 進行加密3.3 數據導出3.3.1 Navicat 導出3.3.2 copy 命令導出3.4 數據解密3.4.1 Navicat 導入3.4.2 copy 導入3.5 坑1.需求說明 從內網導出敏感數據的時候,對…

SDK、JDK、JRE、JVM的區別

SDK、JDK、JRE、JVM的區別一、SDK二、JDK三、JRE四、JVM五、JDK、JRE、JVM三者關系圖一、SDK SDK(Software Development Kit,程序軟件開發工具包),可以認為jdk只是sdk的一種(子集),而當提及jav…

如何啟動一個分支網絡改造試點?三步走

在多云化、全球化的今天,企業的分支網絡早已不僅僅是“能連”的問題。視頻會議卡頓、ERP 響應延遲、跨境訪問不穩、合規風險增大……這些都讓 CIO 和 IT 負責人越來越清楚:分支網絡改造是數字化的必修課。但是,面對幾百甚至上千個分支機構&am…

四,設計模式-原型模式

目的原型模式的產生是為了解決一個問題,即復制對象時對被復制對象所屬類的依賴。當需要復制一個對象時,需要遍歷對象中的所有成員并進行復制,但存在一些問題:某些成員對象可能是私有的無法訪問。同時要復制某個對象,那…

(筆記)Android窗口管理系統分析

概述 Android窗口管理系統是Android UI框架的核心組件,負責管理所有應用窗口的顯示、布局、層級、焦點和輸入事件分發。WindowManagerService(WMS)作為系統服務,協調Surface、Activity、View等組件,為用戶提供流暢的界…

WebIDEPLOY 技術支撐草莓數字產業鏈的構建邏輯與實踐路徑—— 草莓智能育苗系統實踐應用分析

一、WebIDEPLOY 技術與草莓產業數字化的適配邏輯WebIDEPLOY 技術以 “低門檻接入、全鏈路協同、數據驅動” 為核心特征,其底層架構可精準對接草莓產業鏈的碎片化需求。通過零代碼設備接入模塊,能快速整合育苗棚傳感器、種植區智能設備、銷售端數據平臺等…

汽車電氣系統的發展演進為測試帶來了哪些影響?

隨著汽車智能化進程加速,車輛電氣系統方案持續演進。為滿足日益嚴格的功能安全要求,主機廠逐漸引入智能配電、冗余配電等新型方案,這給電氣系統的測試環節帶來了顯著影響。智能配電測試何為智能配電?下圖分別展示了傳統電氣架構以…

Rocky9配置完VMware橋接模式后沒有自動獲取IP

現象如下:查看網卡狀態: nmcli dev status可以看到ens160存在,但是disconnected查看已有連接配置: nmcli con show可以看到連接配置也在重啟NetworkManager systemctl restart NetworkManager激活網卡 sudo nmcli con up "en…

Unity List 相關

順序復制同類型的List①list2 new List<T>(list1);②list2.Clear(); list1.ForEach(item > list2.Add(item));倒序復制同類型的Listlist2 new List<T>(list1);//順序復制 list2.Reverse();//顛倒list亂序復制同類型的ListList<T> list2 new List<T&…

網絡安全測試(一)Kali Linux

Kali Linux 是一款專為網絡安全測試、滲透測試和白帽黑客設計的 Linux 發行版&#xff0c;預裝了大量安全測試工具。以下是其核心工具的分類及代表性工具介紹&#xff1a; 一、信息收集工具 用于獲取目標網絡、主機或系統的基礎信息。 Nmap&#xff1a;網絡掃描工具&#xff0…

go grpc使用場景和使用示例

Go gRPC 使用場景 微服務架構中的服務間通信&#xff1a;在微服務架構中&#xff0c;不同的服務之間需要高效、可靠地進行通信和數據交換&#xff0c;gRPC 可以很好地滿足這一需求。需要高并發、低延遲通信的場景&#xff1a;gRPC 基于 HTTP/2 協議&#xff0c;支持多路復用和頭…

6.8 學習ui組件方法和Element Plus介紹

學習 UI 組件庫的核心是 “文檔 實踐 深入”。從官方文檔入門&#xff0c;通過構建真實項目來鞏固和深化理解&#xff0c;適時探索源碼以提升認知。同時&#xff0c;掌握按需引入、主題定制、插槽等關鍵技術&#xff0c;并保持對性能、可訪問性和最佳實踐的關注。記住&#x…

MongoDB和Mysql比較

MongoDB與MySQL深度對比:選擇適合你的業務的數據存儲方案 在當今數據驅動的時代,選擇合適的數據庫系統對應用性能、開發效率和業務擴展性至關重要。作為數據庫領域的兩大巨頭,關系型數據庫的代表MySQL和文檔型NoSQL的代表MongoDB,常常成為開發者面臨的選擇。本文將從數據模…

LoRA modules_to_save解析及卸載適配器(62)

LoRA modules_to_save解析及卸載適配器 modules_to_save解析 PEFT 模型中卸載適配器 在需保存模塊列表中,還可以添加什么 modules_to_save解析 還有一個配置參數可用于指定你希望保持 “活躍且可訓練” 的層列表 —— 也就是說,這些層會被設為可訓練狀態。更便捷的是,你無需…

分支多、云也多,網絡又慢又燒錢?一套方案全搞定!

隨著企業云化和全球化步伐加快&#xff0c;多云、混合云已成為常態&#xff0c;而非選擇。隨之而來的是網絡架構的復雜性與日俱增&#xff1a;分支越來越多&#xff0c;應用越來越散&#xff0c;鏈路越來越雜。IT部門不僅要保障關鍵應用的體驗&#xff0c;還要應對跨境合規、成…

centos7安裝java mysql redis nginx

1.安裝java8(百度) yum install java-1.8.0-openjdk.x86_64 [rootcanteen jar]# yum install java-1.8.0-openjdk.x86_64 yum install java-1.8.0-openjdk-devel.x86_64 查java版本&#xff1a; [rootlocalhost ~]# java -version openjdk version "1.8.0_372" Op…

【STM32】G030單片機的窗口看門狗

一、簡單介紹窗口看門狗適合需要精確時序控制的場合&#xff0c;在一個受限的窗口期內喂狗&#xff0c;如果遞減計數器還沒有到窗口值就喂狗&#xff0c;會觸發復位如果一直不喂狗&#xff0c;也會觸發復位&#xff0c;和之前的獨立看門狗的窗口選項有點類似需要指出的是&#…

完整代碼注釋:實現 Qt 的 TCP 客戶端,實現和服務器通信

一、實驗效果演示 實現 Qt 的 TCP 客戶端&#xff0c;實現和服務器通信二、代碼框架 三、代碼 tcpclient客戶端代碼 tcpclient.cpp #include "tcpclient.h" #include "ui_tcpclient.h" #include <QDebug> #include <QMessageBox> #include …

AR培訓系統:油氣行業的安全與效率革新

在油氣行業&#xff0c;一場由增強現實&#xff08;AR www.teamhelper.cn &#xff09;技術引領的培訓革命正在悄然發生。新員工們不再需要冒著生命危險在真實的鉆井平臺上學習操作&#xff0c;而是通過AR眼鏡在虛擬環境中模擬鉆井、起下鉆甚至處理井噴等復雜操作。這種創新的培…

Linux 多線程:互斥與同步

Linux 多線程中的互斥與同步 —— pthread_mutex 與 semaphore在 Linux 多線程編程中&#xff0c;線程間共享全局變量或數據結構是常見場景。如果多個線程同時讀寫同一塊內存&#xff0c;就可能產生 數據競爭 和 不一致。為了解決這些問題&#xff0c;Linux 提供了多種 線程同步…