Python模塊——unittest 單
- 2020 年 1 月 10 日
- 筆記
unittest是python單元測試框架,又叫做PyUnit。
之所以稱為框架是它代替開發人員完成了一些調用、IO等與單元測試無直接關係的支撐代碼,讓開發人員可以專註與測試用例的編寫,簡化單元測試工作。
單元測試是一種基本的,由開發人員(而不是測試人員)完成的測試,保證一個程序基本單元的正確性。單元的概念我個人理解就類似電子設備中的元器件,一個個元器件(單元)組成了整個電子設備(程序)。而元器件的功能是單一的、確定的,可以在電子設備未完全成型(程序未完全實現)之前對其正確性進行測試(即單元測試)。同時,這些元器件是獨立的,可以方便的更換(高內聚,低耦合,可以任意重構)。所以單元測試是測試驅動開發、極限編程、敏捷中的重要概念。
一個簡單的例子:
#FileName: ut_target.py class EqualToZero(Exception): pass class SplitZero(object): def splitzero(self, num): if num > 0: return "num is bigger than zero" elif num < 0: return "num is smaller than zero" else: raise EqualToZero
#FileName: utest.py from ut_target import SplitZero, EqualToZero import unittest class SzTestCase(unittest.TestCase): def setUp(self): print "test start" def tearDown(self): print "test stop" def testSzBig(self): num = 10 sz = SplitZero() self.assertEqual(sz.splitzero(num), "num is bigger than zero") def testSzSmall(self): num = -10 sz = SplitZero() self.assertEqual(sz.splitzero(num), "num is smaller than zero") def testSzEqual(self): num = 0 sz = SplitZero() self.assertRaises(EqualToZero, sz.splitzero, num) if __name__ == "__main__": unittest.main()
執行python utest.py -v
testSzBig (__main__.SzTestCase) ... test start test stop ok testSzEqual (__main__.SzTestCase) ... test start test stop ok testSzSmall (__main__.SzTestCase) ... test start test stop ok ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK
unittest基本使用方法
1.import unittest
2.定義一個繼承自unittest.TestCase的測試用例類
3.定義setUp和tearDown,在每個測試用例前後做一些輔助工作。
4.定義測試用例,名字以test開頭。
5.一個測試用例應該只測試一個方面,測試目的和測試內容應很明確。主要是調用assertEqual、assertRaises等斷言方法判斷程序執行結果和預期值是否相符。
6.調用unittest.main()啟動測試
7.如果測試未通過,會輸出相應的錯誤提示。如果測試全部通過則不顯示任何東西,這時可以添加-v參數顯示詳細信息。
參考
[1]http://docs.python.org/release/2.6.8/library/unittest.html
[2]http://www.ibm.com/developerworks/cn/linux/l-pyunit/index.html