python unittest框架使用可以用兩種方法:
(1)所有內容寫在一個python文件裏
eg:https://blog.csdn.net/panyueke/article/details/85305223
(2)function與主框架隔離
eg:functions.py
def fun_div(x):
return x/2
def fun_add(x):
return x+2
def fun_minus(x):
return x-2
def fun_multi(x):
return x*2
testFun.py
import unittest
from test.functions import fun_add,fun_minus,fun_multi,fun_div
class TestFun(unittest.TestCase):
times = 0
@classmethod
def setUpClass(cls):
print('setUpclass')
def setUp(self):
# 每個測試用例執行之前都會執行該方法
TestFun.times += 1
print('setUp', TestFun.times)
def tearDown(self):
# 每個測試用例執行之後都會執行該方法
TestFun.times += 1
print('tearDown', TestFun.times)
def test1(self):
# 測試用例1:fun_div
# 使用unittest提供的斷言驗證functions中的函數的正誤
# 如果不相等就會失敗
self.assertEqual(2, fun_div(4))
self.failUnlessEqual(2, 2)
# 如果表達式爲False,測試失敗
self.assertTrue(1 < 2)
self.failUnless(2 == 2)
# 如果兩個值相等,就會測試失敗
self.assertNotEqual(2, 1)
def test2(self):
# 測試用例2:fun_add
self.assertNotEqual(2, 1)
def test2(self):
# 測試用例2:fun_add
self.assertTrue(fun_add(6) == 8)
def test3(self):
# 測試用例3:fun_minus
self.assertNotEqual(6, fun_minus(6))
self.assertEqual(4, fun_minus(6))
def test4(self):
# 測試用例4:fun_multi
self.assertIsInstance(4, int)
self.assertEqual(8, fun_multi(4))
@unittest.skipIf(True, 'no')
def test5(self):
print('跳過!')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
if __name__ == '__main__':
# unittest.main()
suit = unittest.TestSuite()
suit.addTest(TestFun('test1'))
suit.addTest(TestFun('test2'))
suit.addTest(TestFun('test3'))
suit.addTest(TestFun('test4'))
runner = unittest.TextTestRunner()
runner.run(suit)
過程中遇到的問題如下:
(1)問題:目錄如下,但是導其他python文件裏面的函數失敗
解決方案:
(2)問題:TypeError: setUpClass() missing 1 required positional argument: 'cls'
解決方案:類方法添加@classmethod