python模塊分析之hashlib加密(二)python
TestLoader:加載或分發測試任務的調度器;單元測試
TestCase:測試用例的對象;測試
TestSuite:多個測試用例的容器;ui
TextTestRunner:執行測試用例的工做者;this
TextTestResult:測試結果保存的對象;
fixture:搭建一個測試環境;
# 使用斷言方法 assertEqual 若是兩個值相等,則pass assertNotEqual 若是兩個值不相等,則pass assertTrue 判斷bool值爲True,則pass assertFalse 判斷bool值爲False,則pass assertIsNone 不存在,則pass assertIsNotNone 存在,則pass
# mytest.py def add(a, b): return a+b def minus(a, b): return a-b def multi(a, b): return a*b def divide(a, b): return a/b # test.py import unittest from mytest import * class MathTest(unittest.TestCase): '''測試main模塊''' def test_add(self): '''測試add函數''' self.assertEqual(2,add(1,1)) def test_minus(self): '''測試minus函數''' self.assertEqual(2,minus(3,1)) def test_multi(self): '''測試multi函數''' self.assertEqual(15,multi(3,5)) def test_divide(self): '''測試divide函數''' self.assertEqual(2,divide(10,5)) if __name__ == '__main__': unittest.main(verbosity=1)
執行test.py文件得到測試的結果。
知識點
每一個繼承TestCase的類都是一個測試用例,其中的每個以test開頭的方法都是一個測試實例;
測試的實例必須以test開頭,不然沒法被識別;在方法下面加註釋後,在測試的結果終端能夠顯示;
測試的執行時沒有順序的,完後後標誌:成功是 .,失敗是 F,出錯是 E,跳過是 S。
unittest.main中的verbosity方法能夠控制報告的詳細程度,設爲 0,則不輸出每一用例的執行結果;若是設爲 2,則輸出詳細的執行結果,默認爲1;
import unittest class MathTest(unittest.TestCase): '''測試main模塊''' def setUp(self): """測試前的準備工做""" pass def tearDown(self): """測試後的工做""" pass
import unittest class MathTest(unittest.TestCase): '''測試main模塊''' @classmethod def setUpClass(cls): """測試前的準備工做""" pass @classmethod def tearDownClass(cls): """測試後的工做""" pass
# test_suite.py import unittest from mytest import MathTest if __name__ == '__main__': # 建立一個TestSuite的容器 suite = unittest.TestSuite() # 添加測試用例,指定按照添加的順序來 tests = [MathTest("test_add"), MathTest("test_minus"), MathTest("test_divide")] # 在容器中加入 suite.addTests(tests) # 能夠加入單個 # suite.addTest(MathTest("test_minus")) # 有時候咱們並不關注執行的順序 tests2 = unittest.TestLoader().loadTestsFromTestCase(MathTest) tests1 = unittest.TestLoader().loadTestsFromTestCase(MathTest) # 以列表的形式加入,tests1和tests2是一個容器,容器能夠嵌套容器 suite.addTests([test1,test2]) # 通常結果默認輸出到終端,能夠設置輸出到文件 with open('UnittestTextReport.txt', 'a',encoding='utf-8') as f: runner = unittest.TextTestRunner(stream=f, verbosity=2) runner.run(suite)
unittest.skip(reason):無條件跳過,reason能夠用來寫跳過的緣由。
unittest.skipIf(condition, reason):當condition爲True是跳過;condition能夠是一個函數,類等任何對象;
unittest.skipUnless(condition, reason):當condition爲False是跳過;
class MathTest(unittest.TestCase): '''測試main模塊''' @unitteat.skip('skip this add') def test_add(self): '''測試add函數''' self.assertEqual(2,add(1,1))