網站首頁 編程語言 正文
前言:
Unittest又名單元測試,主要用于測試自己寫的代碼的正確性和完備性,也方便自己和他人對代碼的維護。在軟件開發過程中,測試驅動開發的理念是一種好的開發習慣。
例如現在我們寫了一個求絕對值的函數my_abs,存放在myAbs.py中
def my_abs(number):
if not (isinstance(number, int) or isinstance(number, float)):
raise ValueError("invalid value %s" % number)
else:
if(number >= 0):
return number
else:
return -number
此處的my_abs函數對參數做了檢查,參數必須是一個數(python的數只有int和float型)。那么如果想要測試這個函數的正確性,我們需要寫一個測試函數,用于測試函數的各個分支情況。
基于unittest的的測試代碼如下:
import unittest
from myAbs import my_abs
class TestmyAbs(unittest.TestCase):
def test_positive(self):
self.assertEqual(my_abs(1), 1)
def test_zero(self):
self.assertEqual(my_abs(0), 0)
def test_negative(self):
self.assertEqual(my_abs(-1), 1)
def test_inputerror(self):
with self.assertRaises(ValueError):
my_abs("1")
if __name__ == "__main__":
unittest.main()
上述代碼存放在test_myAbs.py中。
unittest的基本使用方法是:
- 1. 文件命名以test_開頭,這樣方便unittest自動執行,unittest能自動識別目錄下test_開頭的文件執行
- 2. import unittest? ? ?這個是運行unittest的前提
- 3. 定義class要以Test開頭,必須要從unittest.TestCase繼承,且不能有init方法,測試的方法或者函數以test_開頭
- 4. 測試方法中使用assert進行斷言
在上面測試代碼的TestMyabs類的方法中,分別對正數,零和負數的情況進行了測試,使用assertEqual進行結果的判定;另外測試中還對輸入參數是無效的情況進行了判定,使用了with語句和assertRaises的方式,針對期望拋出來的異常進行判定
unittest的運行方式:
1. 單獨運行test_myAbs.py文件,前提是在文件尾增加
? ??if __name__ == "__main__":
? ? ? ? unittest.main()
2. 發送命令 python -m unittest .\myAbs.py
? ?當發送命令python -m unittest時,會執行當前目錄下所有test_開頭的文件
運行結果如下:
Testing started at 4:43 PM ...
Launching pytest with arguments C:/work/myPythonPrj/test_myAbs.py --no-header --no-summary -q in C:\work\myPythonPrj
============================= test session starts =============================
collecting ... collected 4 items
test_myAbs.py::TestmyAbs::test_inputerror PASSED [ 25%]
test_myAbs.py::TestmyAbs::test_negative PASSED [ 50%]
test_myAbs.py::TestmyAbs::test_positive PASSED [ 75%]
test_myAbs.py::TestmyAbs::test_zero PASSED [100%]
============================== 4 passed in 0.03s ==============================
Process finished with exit code 0
原文鏈接:https://blog.csdn.net/yangjingdong2008/article/details/126485681
相關推薦
- 2022-03-15 Docker Run Cadvisor failed: inotify_add_watch /sy
- 2022-07-15 VS2022?Git提交代碼的實現_C 語言
- 2022-07-13 JMeter主要元件_線程組的使用方法
- 2023-01-03 C++定義和初始化string對象實例詳解_C 語言
- 2022-03-29 C語言中的getchar()使用詳解_C 語言
- 2022-12-28 jquery點擊獲取動態數據進行傳參問題_jquery
- 2022-12-22 Python類繼承及super()函數使用說明_python
- 2023-02-25 C++?move()函數及priority_queue隊列使用記錄_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支