单元测试
首先写了一个计算类(只写了加方法):
# 类名继承object class Count(object): # 初始化变量(属性)值,此时在声明对象的时候需要传入初始值a和b def __init__(self, a, b): self.a = int(a) self.b = int(b) # 定义一个加方法,实现返回a+b def add(self): return self.a + self.b
然后写一个简单的加法计算单元测试:
# 从calculate.py中导入Count类 from calculate import Count # 导入unittest单元测试类 import unittest # 创建测试类u_test继承至unittest.TestCase class u_test(unittest.TestCase): # setUp可以理解为测试初始化,一般用于测试前的准备工作 def setUp(self): print('Test begin ') # 构造测试方法test_add def test_add(self): # 声明一个对象j,传入属性值4,3 j = Count(4, 3) # 调用unittest.TestCase类的数值判断方法assertEqual self.assertEqual(j.add(), 9) # setUp可以理解为测试后处理,一般用于测试后的处理工作 def tearDown(self): print('Test complete') ''' .py文件可导入使用,也可以单独执行。加入此判断的目的是为了让解释器知道我执行的是utest.py''' if __name__ == '__main__': unittest.main()
下附文件目录:
传入3,4的运行结果:
传入4,5的测试结果:
上述代码只是实现了一个case的执行,并不能执行多个case。所以引入TestSuite,通过unittest.TestSuite类的addCase()方法增加测试用例,通过unittest下的TextTestRunner类的run()方法来执行suite。
下面尝试执行有选择的执行Case:
calculate.py不做更改;unitest.py最后的调用作更改:
from calculate import Count import unittest class u_test(unittest.TestCase): def setUp(self): print('Test begin ') def test_add(self): j = Count(4, 5) self.assertEqual(j.add(), 9) def test_add2(self): j = Count(8, 5) self.assertEqual(j.add(), 12) def tearDown(self): print('Test complete') if __name__ == '__main__': # 声明unittest.TestSuite类的对象suite suite = unittest.TestSuite() # 调用上述类的addTest方法来增加要执行的Case suite.addTest(u_test.test_add2()) # 创建unittest.TextTestRunner类的runner对象 runner = unittest.TextTestRunner() runner.run(suite)
执行结果: