python的unittest模組

  • 2019 年 11 月 5 日
  • 筆記

unittest 原名為 PyUnit,是由 java 的 JUnit 衍生而來

unittest庫提供了test cases, test suites, test fixtures,test runner。

  • test cases 通過繼承TestCase類,創建一個test或者多個test
  • test suites 測試套件,相當於test的容器
  • test fixtures 通常為setup + test case + teardown結構
  • test runner 執行測試用例tests或suit,可以指定執行方式

整體結構

待測試的類:

class Count:    def __init__(self,a,b):    self.a = a    self.b = b    def add(self):    return self.a+self.b

示例1:

import unittest    class TestDemo(unittest.TestCase):         def setUp(self):           print("setUp")         def test_add(self):           z = Count(2,3)           self.assertEqual(z.add(),5)         def test_invid_add(self):           z = Count(2, 3)           self.assertNotEqual(z.add(),6)         def tearDown(self):           print("tearDown")      if __name__=="__main__":       suit=unittest.TestSuite()#在pycharm中,手動修改以一般python文件方式去運行       suit.addTest(TestDemo("test_invid_add"))       suit.addTest(TestDemo("test_add"))       runner=unittest.TextTestRunner()       runner.run(suit)       # unittest.main() #默認按照字母和數字順序執行,等同於unittest.makeSuite(test)

示例2:

import unittest    lass TestDemo(unittest.TestCase):        @classmethod        def setUpClass(cls):          print("setUpClass")          def test_add(self):          print("test_add")          z = Count(2,3)          self.assertEqual(z.add(),5)          def test_invid_add(self):          print("test_invid_add")          z = Count(2, 3)          self.assertNotEqual(z.add(),6)          @classmethod        def tearDownClass(cls):           print("tearDownClass")        if __name__=="__main__":       suit=unittest.TestSuite()       suit.addTest(TestDemo("test_time"))       suit.addTest(TestDemo("test_add"))       suit.addTest(TestDemo("test_invid_add"))       runner=unittest.TextTestRunner()       runner.run(suit)

從以上2個示例可知道:

  • unittest默認是按照字母和數字的順序運行,倘若需要按照我們指定的順序執行,可使用 suit.addTest()的方式去指定
  • setUp()、tearDown()會在每個測試用例(test開頭)之前和之後執行
  • setUpClass(cls)、tearDownClass(cls)僅在用例之前和之後各執行1次,與上述的setUp()、tearDown()不同
  • 使用pycharm IDE運行unittest文件,不管是默認的用例執行順序,還是指定的用例執行順序,用例執行結果均為默認的順序,即按照字母和數字的順序執行。這算是pycharm的一個小小bug,具體做法:進入運行配置介面,在Python 下手動創建指定執行的py文件,而不是Python tests下