概述
- 單元測試只是對工程中的代碼單元(通常細化到每個函數)進行正確性驗證的工作;
- 對自己寫的模塊和類進行必要的單元測試,保證嚴謹正確,既是良好的開發習慣,也是一種規範;
- Python中的標準庫中單元測試的模塊是單元測試;
import unittest
單元測試
待測試的工具類
# 待測的工具類
class MathUtil:
# a,b相加
def sum(self, a, b):
return a + b
# a,b相減
def sub(self, a, b):
return a - b
# 判斷a是否大於b
def gt(self, a, b):
return a > b
測試用例類,有以下幾個要點:
- 測試用例類必須繼承unittest.TestCase生成生成
- 具體的測試項函數必須以的的testXXX來命名
- 設置()方法會在每個測試項執行前調用,如有必要的初始化工作可以通過覆寫該方法來實現
- TEARDOWN()方法會在每個測試項結束後調用,如有善後工作可以通過覆寫該方法來實現
- 在具體的測試項函數中,使用的測試用例的assertXXX系列函數預言結果
- 如果程序執行結果與預測的一致,測該單項測試通過,否則不通過
# 測試用例類,必須繼承於unittest.TestCase
class MathUtilTest(unittest.TestCase):
'''MathUtil工具類測試用例'''
# 測試項初始化方法
def setUp(self):
print("MathUtilTest setUp")
self.mu = MathUtil()
# 測試項結束時調用
def tearDown(self):
print("MathUtilTest tearDown")
'''
一系列的測試方法,都必須以testxxx命名
'''
# 測試MathUtil的sum方法
def testSum(self):
print("testSum...")
# 斷言相等
self.assertEqual(self.mu.sum(3, 4), 7)
# 測試MathUtil的sub方法
def testSub(self):
print("testSub...")
# 斷言相等
self.assertEqual(self.mu.sub(3, 4), -1, "testSub failed!!!")
# 測試MathUtil的gt方法
def testGt(self):
print("testOthers...")
# 斷言真假
self.assertTrue(self.mu.gt(5, 4))
self.assertFalse(self.mu.gt(4, 5))
# 斷言拋出異常
with self.assertRaises(TypeError):
self.mu.sum(1, "2")
執行單元測試
if __name__ == '__main__':
# 運行當前模塊中的所有測試用例
unittest.main()
本次測試全部通過
修改MathUtil的總和()方法,使其邏輯錯誤,觀察這一次的單元測試結果
class MathUtil:
def sum(self, a, b):
return a - b
結果下顯示testSum這一單項測試失敗:AssertionError:-1!= 7結果結果-1與預測值7不相符:
測試套件
- unittest.main()方法會執行當前模塊中的所有測試用例類中的所有測試項,這顯得不太靈活;
- unittest.TestSuite類是一個測試用例容器,可以按需添加測試用例於其中,使得單元測試既可以批量進行,又可以自主增減測試項目;
import unittest
from unittest.runner import TextTestRunner
# 定義一個測試套件
suite = unittest.TestSuite()
# 往測試套件裏新增用例類下的所有測試項
suite.addTest(unittest.makeSuite(MathUtilTest))
suite.addTest(unittest.makeSuite(MyTest2))
suite.addTest(unittest.makeSuite(MyTest3))
# 執行測試套件
runner = TextTestRunner()
ret = runner.run(suite)
print(ret)
版權聲明:本文爲博主原創文章,未經博主允許不得轉載.https://my.csdn.net/pangzhaowen