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