python单元测试框架unittest案例

1.首先定义几个被测试函数:

#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

2.定义测试类:

#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

3.定义测试顺序

#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

实际上他比我写的好多了~~!

扫描二维码关注公众号,回复: 1940634 查看本文章


猜你喜欢

转载自blog.csdn.net/lwgkzl/article/details/80939554