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