python 單元測試 unittest

單元測試能夠幫助咱們準確迅速地定位出現問題的模塊和單元。css

單元測試的對象是函數,必須有輸出結果(哪怕是異常輸出),以便單元測試模塊可以捕獲返回值,而且與預期值進行比較,從而得出測試經過與否函數

單元測試的加載能夠經過unittest.main()來啓動單元測試的測試模塊。單元測試

而testsuit裏存放的就是單元測試的用例,下面分別列出了2種方法的使用。測試

  • setUp():             每一個測試函數運行前運行
  • tearDown():        每一個測試函數運行完後執行
  • setUpClass():      必須使用@classmethod 裝飾器,全部test運行前運行一次
  • tearDownClass(): 必須使用@classmethod裝飾器,全部test運行完後運行一次

:引入模塊   import unittest ui

例1:測試函數

def sum(x, y):
    return x + y

def sub(x, y):
    return x - y

單元測試模塊spa

class mytest(unittest.TestCase):   #全部執行測試的類都繼承TestCase類 #初始化工做
    def setUp(self):
        pass
    #清退工做
    def tearDown(self):
        pass
    #具體的測試用例,必定要以test開頭
    def testsum_1(self):
        self.assertEqual(sum(1, 2), 3, "test sum fail")

    def testsum_2(self):
        self.assertEqual(sum(1, 2), 2, "test sum fail")

    def testsub(self):
        self.assertEqual(sub(2, 1), 1, "test sub fail")

if __name__ == "__main__":
    unittest.main()

測試結果code

..F
======================================================================
FAIL: testsum_2 (__main__.mytest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:/task/��Ԫ����/test1.py", line 18, in testsum_2
    self.assertEqual(sum(1, 2), 2, "test sum fail")
AssertionError: test sum fail

----------------------------------------------------------------------
Ran 3 tests in 0.003s

FAILED (failures=1)

:F表示fail, F前的表示測試經過,有E的話表示程序自身異常對象

 

例2:測試類

class myclass:
    def __init__(self):
        pass

    def sum(self, x, y):
        return x + y

    def sub(self, x, y):
        return x - y

測試代碼blog

class mytest(unittest.TestCase):
    def setUp(self):
        self.tclass = myclass()

    def tearDown(self):
        pass

    def testsum_1(self):
        self.assertEqual(self.tclass.sum(1, 2), 3, "test sum fail")

    def testsum_2(self):
        self.assertEqual(self.tclass.sum(1, 2), 3, "test sum fail")

    def testsub(self):
        self.assertEqual(self.tclass.sub(2, 1), 1, "test sub fail")

if __name__ == "__main__":
    unittest.main()

結果繼承

..F
======================================================================
FAIL: testsum_2 (__main__.mytest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:/task/��Ԫ����/test2.py", line 24, in testsum_2
    self.assertEqual(self.tclass.sum(1, 2), 5, "test sum fail")
AssertionError: test sum fail

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)

 

例3:構造測試集

被測代碼

class myclass:
    def __init__(self):
        pass

    def sum(self, x, y):
        return x + y

    def sub(self, x, y):
        return x - y

測試代碼

class mytest(unittest.TestCase):
    def setUp(self):
        self.tclass = myclass()

    def tearDown(self):
        pass

    def testsum_1(self):
        self.assertEqual(self.tclass.sum(1, 2), 3, "test sum fail")

    def testsum_2(self):
        self.assertEqual(self.tclass.sum(1, 2), 5, "test sum fail")

    def testsub(self):
        self.assertEqual(self.tclass.sub(2, 1), 1, "test sub fail")

def suite():
    suite = unittest.TestSuite()
    suite.addTest(mytest("testsum_1"))
    suite.addTest(mytest("testsum_2"))
    suite.addTest(mytest("testsub"))
    return suite

if __name__ == "__main__":
    unittest.main(defaultTest = "suite")
相關文章
相關標籤/搜索