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