標籤:
單元測試可以協助我們準確迅速地定位出現問題的模組和單元。
單元測試的對象是函數,必須有輸出結果(哪怕是異常輸出),以便單元測試模組能夠捕獲傳回值,並且與預期值進行比較,從而得出測試通過與否
單元測試的載入可以通過unittest.main()來啟動單元測試的測試模組。
而testsuit裡存放的就是單元測試的用例,下面分別列出了2種方法的使用。
- setUp(): 每個測試函數運行前運行
- tearDown(): 每個測試函數運行完後執行
- setUpClass(): 必須使用@classmethod 裝飾器,所有test運行前運行一次
- tearDownClass(): 必須使用@classmethod裝飾器,所有test運行完後運行一次
例1:測試函數
def sum(x, y): return x + ydef 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.003sFAILED (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.001sFAILED (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 suiteif __name__ == "__main__": unittest.main(defaultTest = "suite")
python 單元測試unittest