🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快
一、什么是單元測試?
單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。至于“單元”的大小或范圍,并沒有一個明確的標準,“單元”可以是一個函數、方法、類、功能模塊或者子系統。
單元測試通常和白盒測試聯系到一起,如果單從概念上來講兩者是有區別的,不過我們通常所說的“單元測試”和“白盒測試”都認為是和代碼有關系的,所以在某些語境下也通常認為這兩者是同一個東西。還有一種理解方式,單元測試和白盒測試就是對開發人員所編寫的代碼進行測試。
提示:概念這個東西大概理解是什么意思即可~
二、單元測試誰來做?
想一想:前面我們介紹了,單元測試簡單理解就是對開發人員所編寫的代碼進行測試,既然和代碼相關我們第一感覺那應該是“開發人員來做”;再一看單元測試包含“測試”兩個字,那么“測試人員來做”也應該是合理的吧。
單元測試一般是有開發人員或測試人員來做。誰來做并沒有一個絕對的標準,要根據公司的實際情況來決定。接下來我們分析一下開發人員或測試人員做單元測試的優缺點:
開發人員做單元測試:
優點:開發人員對代碼最熟悉,而且開發人員編程技能相對比較強,所以開發人員自己寫單元測試效率上和覆蓋率上都比較高
缺點:開發人員平時寫業務代碼就要花費很多時間,有時候確實沒有時間寫單元測試;而且大部分開發人員沒有太好的測試思想,單元測試可能只是寫個最簡單的用例就完了;自己寫的代碼自己測,往往都是不靠譜!
測試人員做單元測試:
優點:測試人員有比較系統的測試思想,可以更好地保證用例的覆蓋。而且通過寫單測測試能更好地了解具體代碼結構、流程,對于后續的業務測試也非常有利。
缺點:測試人員的編程技能相對比較弱,如果不同編程是無法開展單元測試的。并且測試人員對代碼沒有開發人員熟悉,效率會比較低。
三、單元測試怎么做?
- 單元測試的實現方式包括:人工靜態檢查、動態執行跟蹤
- 人工靜態檢查:就是通常所說的“代碼走讀”,主要是保證代碼邏輯的正確性
動態執行跟蹤:就是把程序代碼運行起來,檢查實際的運行結果和預期結果是否一致
人工靜態檢查
人工靜態檢查包含的主要內容:
- 檢查算法的邏輯正確性
- 模塊接口的正確性檢查
- 輸入參數有沒有作正確性檢查
- 調用其他方法接口的正確性
- 異常錯誤處理
- 保證表達式、SQL語句的正確性
- 檢查常量或全局變量使用的正確性
- 程序風格的一致性、規范性
- 檢查代碼注釋是否完整
動態執行跟蹤
動態執行跟蹤需要編寫測試腳本調用業務代碼進行測試,為了更好的管理維護測試腳本,一般會采用單元測試框架來管理,不同的語言有不同的單元測試框架:
- Java:JUnit、TestNG
- Python:UintTest、pyTest
單元測試的一個重要的衡量標準就是代碼覆蓋率,盡量做到代碼的全覆蓋。常見單元測試覆蓋標準:
- 語句覆蓋
- 分支覆蓋
- 條件覆蓋
- 分支-條件覆蓋
- 條件組合覆蓋
- 路徑覆蓋
入門示例:針對開發人員編寫的實現計算操作的方法進行單元測試
# 開發人員編寫的業務代碼
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)# ...
單元測試基本等同于白盒測試。
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。