python的unittest模块实现软件单元测试

本文详细介绍Python中的单元测试实践,包括基本测试用例的编写、测试套件的组织、使用unittest框架进行测试的方法,以及如何利用mock工具进行隔离测试等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/env python
#-*-coding:utf-8-*-
class Count(object):
    version=1
    def add(self,x,y):
        return x+y
    def sub(self,x,y):
        return x-y

if __name__=='__main__':
    c=Count()
    print(c.add(1,2))
    print(c.sub(10,5))
#!/usr/bin/env python
#-*-coding:utf-8-*-
#unittest

import unittest
from count import Count

class TestCount(unittest.TestCase):
    def setUp(self):
        print('setup')
        self.obj=Count()
    def tearDown(self):
        print('tearDown')
        self.obj=None
    def add_test(self):
        print('Run add_test')
        print(self.obj.add(10,20)==30)
    def sub_test(self):
        print('Run sub_test')
        print(self.obj.sub(10,5)==5)
#增加测试单元1
def get_suite():
    case_list=['add_test','sub_test']
    demo_countadd=TestCount('add_test')
    demo_countsub=TestCount('sub_test')
    demos=map(TestCount,case_list)
    suite=unittest.TestSuite()
    #suite.addTest(demo_countadd)
    #suite.addTest(demo_countsub)
    suite.addTest(demos)
    return suite
#增加测试单元2
class CountTestSuite(unittest.TestSuite):
    def __init__(self):
        case_list=['add_test','sub_test']
        unittest.TestSuite.__init__(self,map(TestCount,case_list))

if __name__=='__main__':
    #s=get_suite()
    s=CountTestSuite()
    runner=unittest.TextTestRunner()
    print(s.countTestCases())
    runner.run(s)
#!/usr/bin/env python
#-*-coding:utf-8-*-
#unittest

import unittest
from count import Count

class TestCount(unittest.TestCase):
    def setUp(self):
        print('setup')
        self.obj=Count()
    def tearDown(self):
        print('tearDown')
        self.obj=None
    def test_add(self):
        print('Run add_test')
        print(self.obj.add(10,20)==30)
    def test_sub(self):
        print('Run sub_test')
        print(self.obj.sub(10,5)==5)
    def test_sum(self):
        print('Run sum_test')
        pass
    def priv_case1(self):
        print('Run priv_case1')
        pass

def get_suite():
    suite=unittest.makeSuite(TestCount,prefix='test')
    print(suite.countTestCases())
    return suite

class CountTestSuite(unittest.TestSuite):
    def __init__(self):
        case_list=['add_test','sub_test']
        unittest.TestSuite.__init__(self,map(TestCount,case_list))

if __name__=='__main__':
    unittest.main()
    '''
    s=get_suite()
    #s=CountTestSuite()
    runner=unittest.TextTestRunner()
    print(s.countTestCases())
    runner.run(s)
    '''
#!/usr/bin/env python
#-*-coding:utf-8-*-
#unittest

import unittest
from count import Count

class TestCount(unittest.TestCase):
    def setUp(self):
       # print('setup')
        self.obj=Count()
    def tearDown(self):
        #print('tearDown')
        self.obj=None
    #装饰器跳过测试
    @unittest.skip('Notest')
    def test_add(self):
        print('Run add_test')
        self.assertEqual(self.obj.add(10,20),30)
    #@unittest.skipIf(Count.version==1,'No test')
    #产生异常装饰
    @unittest.expectedFailure
    def test_sub(self):
        print('call sub test')
        self.assertEqual(self.obj.sub(10,5),6)
    @unittest.skipUnless(Count.version==1,'No test1')
    def test_sum(self):
        print('Run sum_test')
        pass
    def priv_case1(self):
        #print('Run priv_case1')
        pass
#对以test开头的单元测试
def get_suite():
    suite=unittest.makeSuite(TestCount,prefix='test')
    print(suite.countTestCases())
    return suite

class CountTestSuite(unittest.TestSuite):
    def __init__(self):
        case_list=['add_test','sub_test']
        unittest.TestSuite.__init__(self,map(TestCount,case_list))

if __name__=='__main__':
    unittest.main()
    '''
    s=get_suite()
    #s=CountTestSuite()
    runner=unittest.TextTestRunner()
    print(s.countTestCases())
    runner.run(s)
    '''
#!/usr/bin/env python
#-*-coding:utf-8-*-
#统计一个文件夹里所有文件的个数,所有png,jpeg,file,dir的个数
import os
import imghdr
ftypes=['png','jpeg','file','dir']

class CountFiles(object):
    def __init__(self,path='./'):
        self.path=path
        self.fkinds=dict([[val,0] for val in ftypes])#初始化字典
        self.scandir()
    #遍历文件夹
    def scandir(self):
        result=os.walk(self.path)
        for info in result:
            print(info)
            top,dirs,files=info
            self.fkinds['dir']+=len(dirs)
            for f in files:
                fpath=os.path.join(top,f)
                ftype=imghdr.what(fpath)
                if ftype==None:
                    ftype='file'
                self.fkinds[ftype]+=1
    #相应文件的个数
    def getinfobykey(self,key):
        return self.fkinds[key]
    def cjpeg(self):
        return self.getinfobykey('jpeg')
    def cpng(self):
        return self.getinfobykey('png')
    def cfile(self):
        return self.getinfobykey('file')
    def cdir(self):
        return self.getinfobykey('dir')
if __name__=='__main__':
    c=CountFiles(path=r'/home/acm506/桌面/webshixun')
    for key in ftypes:
        print('%s:%s'%(key,c.getinfobykey(key)))
    
#!/usr/bin/env python
#-*-coding:utf-8-*-
#对统计目录的文件进行测试进行测试,
import unittest

from tongji import CountFiles
testdir=r'/home/acm506/桌面/webshixun/'
class TestGlinfo(unittest.TestCase):
    def setUp(self):
        self.obj=CountFiles(path=testdir)
    def test_cjpeg(self):
        self.assertEqual(self.obj.cjpeg(),21)
    def test_cpng(self):
        self.assertEqual(self.obj.cpng(),8)
    def test_cfile(self):
        self.assertEqual(self.obj.cfile(),14)
    def test_cdir(self):
        self.assertEqual(self.obj.cdir(),3)
    def tearDown(self):
        self.obj=None
if __name__=='__main__':
    unittest.main()
            
#!/usr/bin/env python
#-*-coding:utf-8-*-
#mock测试
from unittest import mock
class CouldClient(object):
    def connect(self):
        pass
    def disconnect(self):
        pass
    def upload(self):
        pass
    def download(self):
        pass
tmock=mock.Mock(CouldClient)
print(dir(tmock))

tmock.connect.return_value=200
print(tmock.connect())
tmock.connect.return_value=404
print(tmock.connect())
#!/usr/bin/env python
#-*-coding:utf-8-*-
#对mock进行测试
import unittest
from unittest import mock
#导入待测试的单元
from mockclass import CouldClient
#测试单元
class TestCould(unittest.TestCase):
    def setUp(self):
        self.obj=mock.Mock(CouldClient)
    def tearDown(self):
        self.obj=None
    def test_connect(self):
        self.obj.connect.return_value=200
        self.assertEqual(self.obj.connect(),404)
    def test_disconnect(self):
        pass
if  __name__=='__main__':
    #自动化测试
    unittest.main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值