單元測試可以幫助我們准確迅速地定位出現問題的模塊和單元。
單元測試的對象是函數,必須有輸出結果(哪怕是異常輸出),以便單元測試模塊能夠捕獲返回值,並且與預期值進行比較,從而得出測試通過與否
單元測試的加載可以通過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")