python 單元測試 unittest


單元測試可以幫助我們准確迅速地定位出現問題的模塊和單元。

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

單元測試的加載可以通過unittest.main()來啟動單元測試的測試模塊。

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

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

:引入模塊   import unittest 

例1:測試函數

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

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

單元測試模塊

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()

測試結果

..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

測試代碼

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")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM