Python中的Unittest基本使用
前言:
Unittest又名單元測(cè)試,主要用于測(cè)試自己寫的代碼的正確性和完備性,也方便自己和他人對(duì)代碼的維護(hù)。在軟件開發(fā)過(guò)程中,測(cè)試驅(qū)動(dòng)開發(fā)的理念是一種好的開發(fā)習(xí)慣。
例如現(xiàn)在我們寫了一個(gè)求絕對(duì)值的函數(shù)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函數(shù)對(duì)參數(shù)做了檢查,參數(shù)必須是一個(gè)數(shù)(python的數(shù)只有int和float型)。那么如果想要測(cè)試這個(gè)函數(shù)的正確性,我們需要寫一個(gè)測(cè)試函數(shù),用于測(cè)試函數(shù)的各個(gè)分支情況。
基于unittest的的測(cè)試代碼如下:
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自動(dòng)執(zhí)行,unittest能自動(dòng)識(shí)別目錄下test_開頭的文件執(zhí)行
- 2. import unittest 這個(gè)是運(yùn)行unittest的前提
- 3. 定義class要以Test開頭,必須要從unittest.TestCase繼承,且不能有init方法,測(cè)試的方法或者函數(shù)以test_開頭
- 4. 測(cè)試方法中使用assert進(jìn)行斷言
在上面測(cè)試代碼的TestMyabs類的方法中,分別對(duì)正數(shù),零和負(fù)數(shù)的情況進(jìn)行了測(cè)試,使用assertEqual進(jìn)行結(jié)果的判定;另外測(cè)試中還對(duì)輸入?yún)?shù)是無(wú)效的情況進(jìn)行了判定,使用了with語(yǔ)句和assertRaises的方式,針對(duì)期望拋出來(lái)的異常進(jìn)行判定
unittest的運(yùn)行方式:
1. 單獨(dú)運(yùn)行test_myAbs.py文件,前提是在文件尾增加
? ??if __name__ == "__main__": ? ? ? ? unittest.main()
2. 發(fā)送命令 python -m unittest .\myAbs.py
當(dāng)發(fā)送命令python -m unittest時(shí),會(huì)執(zhí)行當(dāng)前目錄下所有test_開頭的文件
運(yùn)行結(jié)果如下:
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
到此這篇關(guān)于Python中的Unittest基本使用的文章就介紹到這了,更多相關(guān)Python Unittest 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python內(nèi)置函數(shù)reversed()用法分析
這篇文章主要介紹了Python內(nèi)置函數(shù)reversed()用法,結(jié)合實(shí)例形式分析了reversed()函數(shù)的功能及針對(duì)序列元素相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2018-03-03
Python數(shù)據(jù)類型之Number數(shù)字操作實(shí)例詳解
這篇文章主要介紹了Python數(shù)據(jù)類型之Number數(shù)字操作,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)字類型的概念、功能、分類及常用數(shù)學(xué)函數(shù)相關(guān)使用技巧,需要的朋友可以參考下2019-05-05
python列表添加元素append(),extend(),insert(),+list的區(qū)別及說(shuō)明
這篇文章主要介紹了python列表添加元素append(),extend(), insert(),+list的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
python使用redis模塊來(lái)跟redis實(shí)現(xiàn)交互
這篇文章主要介紹了python使用redis模塊來(lái)跟redis實(shí)現(xiàn)交互,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Python實(shí)現(xiàn)的矩陣轉(zhuǎn)置與矩陣相乘運(yùn)算示例
這篇文章主要介紹了Python實(shí)現(xiàn)的矩陣轉(zhuǎn)置與矩陣相乘運(yùn)算,結(jié)合實(shí)例形式分析了Python針對(duì)矩陣進(jìn)行轉(zhuǎn)置與相乘運(yùn)算的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-03-03
pytorch實(shí)現(xiàn)加載保存查看checkpoint文件
這篇文章主要介紹了pytorch實(shí)現(xiàn)加載保存查看checkpoint文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Python+OpenCV實(shí)現(xiàn)基本的圖像處理操作
說(shuō)到圖像處理,那必然要提到opencv模塊了。本文將從最基本的opencv模塊在圖像的基本操作上說(shuō)起,利用Python+OpenCV實(shí)現(xiàn)圖像的讀取保存等,感興趣的可以了解一下2022-07-07

