溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中的Unittest如何使用

發(fā)布時(shí)間:2022-08-26 13:54:24 來(lái)源:億速云 閱讀:149 作者:iii 欄目:開(kāi)發(fā)技術(shù)

今天小編給大家分享一下Python中的Unittest如何使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

前言:

Unittest又名單元測(cè)試,主要用于測(cè)試自己寫(xiě)的代碼的正確性和完備性,也方便自己和他人對(duì)代碼的維護(hù)。在軟件開(kāi)發(fā)過(guò)程中,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的理念是一種好的開(kāi)發(fā)習(xí)慣。

例如現(xiàn)在我們寫(xiě)了一個(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ù)的正確性,我們需要寫(xiě)一個(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_開(kāi)頭,這樣方便unittest自動(dòng)執(zhí)行,unittest能自動(dòng)識(shí)別目錄下test_開(kāi)頭的文件執(zhí)行

  • 2. import unittest     這個(gè)是運(yùn)行unittest的前提

  • 3. 定義class要以Test開(kāi)頭,必須要從unittest.TestCase繼承,且不能有init方法,測(cè)試的方法或者函數(shù)以test_開(kāi)頭

  • 4. 測(cè)試方法中使用assert進(jìn)行斷言

在上面測(cè)試代碼的TestMyabs類(lèi)的方法中,分別對(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_開(kāi)頭的文件

運(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

以上就是“Python中的Unittest如何使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI