Python單元測試:unittest使用簡介


一、概述

   本文介紹python的單元測試框架unittest,這是Python自帶的標准模塊unittest。unittest是基於java中的流行單元測試框架junit設計的,其功能強大且靈活,對於熟悉junit的人來說掌握unittest很簡單。

    unittest涉及的知識點較多,但核心的就那一些,本文只介紹最核心和基礎的內容。

    類似junit,使用unittest編寫python的單元測試代碼,包括如下幾個步驟:

1)編寫一個python類,繼承 unittest模塊中的TestCase類,這就是一個測試類

2)在上面編寫的測試類中定義測試方法(這個就是指的測試用例),每個方法的方法名要求以 test 打頭,沒有額外的參數。 在該測試方法中 調用被測試代碼,校驗測試結果,TestCase類中提供了很多標准的校驗方法,如 最常見的assertEqual。

3)執行 unittest.main() ,該函數會負責運行測試,它會實例化所有TestCase的子類,並運行其中所有以test打頭的方法。

 

二、案例1

我們下面看一個例子,編寫如下的python文件,為了簡單,我們將被測函數與測試代碼放在一個文件中了:

#coding=utf-8
import unittest
#被測試方法
def  cal(a,b):
    return a+b

#測試類    
class CalTest(unittest.TestCase):
    def testA(self):
        expected = 6
        result = cal(2,4)
        self.assertEqual(expected,result)
        
    def testB(self):
        expected = 0
        result = cal(2,1)
        self.assertEqual(expected,result)

#執行所以測試代碼        
if __name__=='__main__':unittest.main()        

上面的測試類CalTest中有兩個測試方法,顯然testB方法我們估計讓校驗出錯。在命令行下執行上述python文件,輸出如下信息:

.F

======================================================================

FAIL: testB (__main__.CalTest)

----------------------------------------------------------------------

Traceback (most recent call last):

  File "test2.py", line 19, in testB

    self.assertEqual(expected,result)

AssertionError: 0 != 3

----------------------------------------------------------------------

Ran 2 tests in 0.001s

FAILED (failures=1)

上面顯示出了執行出錯的用例,以及出錯信息。最后兩句給出了整個測試執行所花的時間,以及測試失敗的用例數。

如果我們將testB修改正確,運行結果輸出如下:

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

 

三、案例2

上面的例子只有一個測試文件(python文件)。在實際的項目中,往往又多個測試文件,每個測試文件針對不同的業務代碼進行測試。

那這時該怎么去執行所有測試文件中的測試用例呢?

假設我們有test1.py測試文件中定義了一個測試類CalTest1 , 另外一個測試test2.py測試文件中定義了一個測試類CalTest2.

這樣要想同時能執行這兩個測試文件中的測試用例,可編寫如下的一個總的測試文件,作為執行的總入口:

#coding=utf-8
import unittest
from test1 import CalTest1
from test2 import CalTest2
if __name__=='__main__':unittest.main()  

 

從上面的例子,可以看出,使用unittest框架還是比較簡單和方便的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM