Python單元測試:unittest使用簡介

1、概述java

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

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

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

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

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

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

 

2、案例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文件,輸出以下信息:code

.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

 

3、案例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框架仍是比較簡單和方便的。

相關文章
相關標籤/搜索