#coding=utf-8
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 float(a)/b
#coding=utf-8
import unittest
from world import *
class TestWorldFunc(unittest.TestCase):
def test_add(self):
print 'test_add'
self.assertEqual(3,add(1,2))
self.assertEqual(3,add(2,1))
def test_minus(self):
print 'test_minus'
self.assertEqual(1,minus(3,2))
def test_multi(self):
print 'test_multi'
self.assertEqual(4,multi(2,2))
def test_divide(self):
print 'test_divide'
self.assertEqual(2,divide(6,3))
self.assertEqual(2.5,divide(5,2))
def setUp(self):
print 'do something before test.prepare environment'
def tearDown(self):
print 'do something after test.clear up'
@classmethod
def setUpClass(cls):
print 'this setup only called once'
@classmethod
def tearDownClass(cls):
print 'this tearDown only called once'
if __name__ == '__main__':
unittest.main()
有几个需要注意的地方:
1.这是我们自己定义的测试类,因为使用了unittest框架,所以需要继承unittest.Testcase类。
2.每一个测试函数都需要一test开头,这样会自动填充很多内容。
3.对于简单的有返回值的函数可以直接使用unittest框架的断言assertEqual()。这个断言判断两个值是否相等,如果不相等,则会测验不通过。对于上面的案例,把除法中的float删掉,那么5/2的结果应该是2.与2.5不相等,所以出现以下提示:
4.关于setUp函数和teardown函数:setUp会在每个case开始之前执行,比如说初始化一些环境,而tearDown会在每个case结束之后执行,可用于清除这个case执行完之后的痕迹。
5.关于setUpclass函数和tearDownclass函数:setUpClass函数只会在第一个case执行前之后执行,不会再每个case之前执行,tearDownclass只会在最后一个case执行完之后执行。如以上代码实例:
可以看到tearDownclass和setUpclass只调用了一次。此外需要注意这两个函数申明的时候需要加上注解:@classmethod
#coding=utf-8
import unittest
from test_world import TestWorldFunc
'''
按顺序执行某几个函数。即可以按顺序
'''
if __name__ == '__main__':
suite = unittest.TestSuite()
#添加某些case的时候
tests = [TestWorldFunc("test_multi"),TestWorldFunc("test_minus"),TestWorldFunc("test_divide")]
suite.addTests(tests)
with open('result','a') as f:
runner = unittest.TextTestRunner(stream=f,verbosity=2)
runner.run(suite)
suite.addTest(TestWorldFunc("test_multi"))
在这个函数里面我们调用了三个函数test_multi,test_minus,test_divide.这三个函数会按这个顺序进行测试,实际上我们可以添加几个tests,即重复tests=.. suite.addTests(tests),这样就可以同时测试多个文件了。
此文参照:https://blog.csdn.net/huilan_same/article/details/52944782
实际上他比我写的好多了~~!