单元测试框架之unittest

单元测试框架的功能:

1.提供用例组织与执行

2.提供丰富的比较方法

3.提供丰富的日志

认识单元测试:

calculator.py
class Count:
    def __init__(self,a,b):
        self.a=int(a)
        self.b=int(b)
        
    def add(self):
        return self.a+self.b

不用测试框架所编写的单元测试如下所示:
from calculator import Count


class TestCount:
    def test_add(self):
        try:
            j=Count(2,3)
            add=j.add()
            assert(add==5),'Integer addition result error!'
        except AssertionError as msg:
            print(msg)
        else:
            print('Test pass!')


mytest=TestCount()
mytest.test_add()
使用unittest单元测试框架来编写测试用例如下所示:
from calculator import Count
import unittest


class TestCount(unittest.TestCase):
    #初始化工作
    def setUp(self):
        print("test start")

    def test_add(self):
        j=Count(2,3)
        self.assertEqual(j.add(),5)
    #收尾工作
    def tearDown(self):
        print("test end")

#__main__代表直接使用该test1.py
if __name__=='__main__':
    unittest.main()
if__name__=="__main__":语句说明
1、python文件的后缀为.py
2、.py文件既可以用来直接执行,也可以用来作为模块被导入
3、在python中导入模块一般使用的是import
unittest中重要的概念:
1、Test Case:一个测试用例
2、Test Suite:测试用例集
3、Test Runner:测试执行策略
4、Test Fixture:一个完整的测试用例环境
from calculator import Count
import unittest


class TestCount(unittest.TestCase):
    #初始化工作
    def setUp(self):
        print("test start")

    def test_add(self):
        j=Count(2,3)
        self.assertEqual(j.add(),5)

    def test_add2(self):
        j=Count(41,76)
        self.assertEqual(j.add(),117)
    #收尾工作
    def tearDown(self):
        print("test end")

#__main__代表直接使用该test2.py
if __name__=='__main__':
    suite=unittest.TestSuite()
    suite.addTest(TestCount("test_add"))
    suite.addTest(TestCount("test_add2"))
    runner=unittest.TextTestRunner()
    runner.run(suite)

组织单元测试用例

当被测功能和测试用例增加后,unittest框架需要扩展和组织新增的测试用例
calculator.py
class Count:
    def __init__(self,a,b):
        self.a=int(a)
        self.b=int(b)

    def add(self):
        return self.a+self.b
    def sub(self):
        return self.a-self.b
testadd.py
from calculator import Count
import unittest


class TestAdd(unittest.TestCase):
    #初始化工作
    def setUp(self):
        print("test start")

    def test_add(self):
        j=Count(2,3)
        self.assertEqual(j.add(),5)

    def test_add2(self):
        j=Count(41,76)
        self.assertEqual(j.add(),117)
    #收尾工作
    def tearDown(self):
        print("test end")

#__main__代表直接使用该test2.py
if __name__=='__main__':
    unittest.main()
testsub.py
from calculator import Count
import unittest


class TestSub(unittest.TestCase):
    #初始化工作
    def setUp(self):
        print("test start")

    def test_sub(self):
        j=Count(2,3)
        self.assertEqual(j.sub(),-1)

    def test_sub2(self):
        j=Count(71,46)
        self.assertEqual(j.sub(),25)
    #收尾工作
    def tearDown(self):
        print("test end")

#__main__代表直接使用该test2.py
if __name__=='__main__':
    unittest.main()
runtest.py
import unittest
import testadd
import testsub
suite=unittest.TestSuite()
suite.addTest(testadd.TestAdd("test_add"))
suite.addTest(testadd.TestAdd("test_add2"))
suite.addTest(testsub.TestSub("test_sub"))
suite.addTest(testsub.TestSub("test_sub2"))

if __name__=='__main__':
    runner=unittest.TextTestRunner()
    runner.run(suite)

如果用例特别多,可以使用discover
import unittest
test_dir='./'
discover=unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
if __name__=='__main__':
    runner=unittest.TextTestRunner()
    runner.run(discover)


用例执行顺序

unittest框架默认根据ASCII码的顺序加载测试用例,如果想改变这个规则,就不能使用main()方法了,而是需要通过TestSuite类的addTest()方法按照一定的顺序来加载
discover()的加载测试用例的规则与main()方法相同 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值