10 python單元測試(一)

2022-09-07 10:48:11 字數 3205 閱讀 9374

認識unittest

什麼是單元測試?

單元測試負責對最小的軟體設計單元(模組)進行驗證,它使用軟體設計文件中對模組的描述作為指南,對重要的程式分支進行測試以發現模組中的錯誤。在python語言下有諸多單元測試框架,如doctest、unittest、pytest、nose等,unittest框架(原名pyunit框架)為python語言自帶的單元測試框架,python2.1及其以後的版本已將unittest作為乙個標準模組放入python開發包中。

首先建立乙個被測試類calculator.py

class count:

def __init__(self,a,b):

self.a=int(a)

self.b=int(b)

#計算加法

def add(self):

return self.a + self.b

不用測試框架寫乙個測試類:

from calculator_method import count

#測試兩個整數相加

class testcount:

def test_add(self):

try:

j=count(2,3)

add=j.add()

assert(add==5),'integer addition result errort!'

except assertionerror as msg:

print(msg)

else:

print('test pass!')

#執行測試類的測試方法

mytest=testcount()

mytest.test_add()

首先,引入calculator檔案中的count類,然後在test_add()方法中呼叫count類並傳入兩個引數2和3;最後呼叫count類中的add()方法對兩個引數做加法運算,並通過assert()方法判斷add()的返回值是否等於5.如果不相等則拋出自定義的異常資訊,如果相等則列印「testpass!」。

通過unittest單元測試框架編寫測試用例:

from calculator_method import count

import unittest

class testcount(unittest.testcase):

def setup(self):

print("test start:")

def test_add(self):

j=count(2,3)

self.assertequal(j.add(),5)

def teardown(self):

print("test end.")

if __name__ == '__main__':

unittest.main()

首先引入unittest模組,建立testcount類繼承unittest的testcase類,我們可以將testcase類看成是對特定類進行測試的集合。

setup()方法用於測試用例執行前的初始化工作,這裡只簡單列印「test start」資訊。teardown()方法與setup()方法相呼應,用於測試用例執行之後的善後工作,這裡列印「test end」資訊。

在test_add()中首先呼叫count類並傳入要計算的數,通過呼叫add()方法得到兩數相加的返回值。這裡不再使用繁瑣的異常處理,而是呼叫unittest框架所提供的assertequal()方法對add()返回值進行斷言,判斷兩者是否相等,assertequal()方法由testcase類繼承而來。

unittest提供了全域性的main()方法,使用它可以方便的將乙個單元測試模組變成可以直接執行的測試指令碼。main()方法使用testloader類來搜尋所有包含在該模組中以「test"命名開頭的測試方法,並自動執行它們。

補充:

if __name__ == "__main__":語句說明

在後面的例項中我們會經常用到這個語句,在解釋它之前先補充點python知識:

1. python檔案的字尾為.py。

2. .py檔案即可以用來直接執行,就像乙個小程式一樣,也可以用來作為模組被匯入。

3. 在python中匯入模組一般使用import。\

if __name__ == '__main__'的意思是:當.py檔案被直接執行時,if __name__ == '__main__'之下的**塊將被執行;當.py檔案以模組形式被匯入時,

if __name__ == '__main__'之下的**塊不被執行。

測試流程:

寫好testcase:乙個class繼承unittest.testcase,就是乙個測試測試用例,其中有多個以test開頭的方法,那麼 每乙個這樣的,在load的時候會生成乙個testcase例項。如果乙個class中有四個test開頭的方法,最後load到suite中時則有四個測試用例

由testloder載入testcase到testsuite

然後由texttestrunner來執行testsuite,執行的結果儲存在texttestresult中。

說明:a. 通過命令列或者unittest.main()執行時,main會呼叫texttestrunner中的run來執行,或者可以直接通過texttestrunner來執行用例。

b. runner執行時,預設將結果輸出到控制台,我們可以設定其輸出到檔案,在檔案中檢視 結果,也可以通過htmltestrunner將結果輸出到html)。

suite=unittest.testsuite()
suite.addtest(testmath("test_add")) #新增加法的測試用例到測試集suite裡面

suite.addtests(testmath("test_add"),testmath("test_sub"),testmath("test_div"))

ts=nuittest.testloader()    #用例載入器

suite.addtest(ts.loadtestsfromtestcase())

ts=unittest.testloader()    #用例載入器

suite.addtest(ts.loadtestsfrommodule(testmathmethod))

python筆記10 單元測試unittest

unittest是python自帶的乙個單元測試模組,我們可以用來做單元測試。unittest包含如下幾個子模組 測試用例 testcase 測試集 testsuite 載入用例 testloader 執行用例 texttestrunner 1.編寫功能類 如編寫乙個介面請求類 2.編寫測試類 1....

Python 單元測試

一 假設我們編寫了一段程式,主要功能是完成阿拉伯數字和羅馬數字之間的轉換 在羅馬數字中,利用7個字母進行重複或者組合來表達各式各樣的數字 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 還有一些關於構造羅馬數字的規則。此程式的框架如下 其中,class romanerror...

python 單元測試

assertequal a,b assertnotequal a,b 斷言值是否相等 assertis a,b assertisnot a,b 斷言是否同一物件 記憶體位址一樣 assertlistequal list1,list2 assertitemnotequal list1,list2 斷言...