python單元測試之unittest
現在單元測試也要慢慢作正規了。
參考以下貼子作了一次python,
https://www.cnblogs.com/sunshine-blog/p/6735690.html
最終我可是要用django和mock的喲。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
python unittest四大組成“元件”:
- test fixture(測試腳手架)——測試代碼的運行環境,指測試準備前和執行後要做的工作,包括setUp()和tearDown();
- TestCase(測試案例)——所有測試用例的基類,它是軟件測試中最基本的組成單元;
- TestSuite(測試套件)——測試案例的集合;
- test runner(執行測試)——測試用例的執行
(note1:什麼是測試用例? 答:測試用例是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試代碼(run),以及測試後環境的還原(tearDown))
unittest測試代碼流程:
- 寫好TestCase
- 由TestLoader加載TestCase到TestSuite
- 然後由TextTestRunner來運行TestSuite,預見性結果保留在TextTestResult中(使用命令行或unittest.main()調用執行)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import myclass
class mytest(unittest.TestCase):
#初始化工作
def setUp(self):
self.tclass = myclass.myclass() #實例化了被測試模塊中的類
#退出清理工作
def tearDown(self):
pass
#具體的測試用例
def test_sum(self):
self.assertEqual(self.tclass.sum(1,2), 3)
#跳過某個case
@unittest.skip("I don't want to run this case.")
def test_sub(self):
self.assertEqual(self.tclass.sub(4, 2), 2)
def test_multi(self):
self.assertEqual(self.tclass.multi(2, 3), 5)
if __name__ == '__main__':
#裝載測試用例(該句話等價於tests = [mytest("test_sum"),mytest("test_sub"),mytest("test_multi")])
tests = unittest.TestLoader().loadTestsFromTestCase(mytest)
#使用測試套件並打包測試用例(addTests()等價於addTest())
suite = unittest.TestSuite()
suite.addTest(tests)
#保存unittest的測試輸出日誌
log_name = "log.txt"
with open(log_name, 'w+') as f:
result = unittest.TextTestRunner(stream=f, verbosity=2).run(suite)
#若不保存測試輸出結果,執行如下命令
result = unittest.TextTestRunner(verbosity=2).run(suite)
#生成測試報告
print("testsRun:%s"%result.testsRun)
print("failures:%s"%len(result.failures))
print("errors:%s"%len(result.errors))
print("skipped:%s"%len(result.skipped))
'''
unittest.main()
'''

最後更新:2017-11-14 11:34:03