首页 > 编程语言 >Python——单元测试的实现

Python——单元测试的实现

时间:2023-04-04 18:07:26浏览次数:44  
标签:function __ Python self 单元测试 实现 测试 test unittest


摘要

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。在软件开中的测试是很重要的一部分。

python测试相关库

  • unittest,内置库,模仿PyUnit写的,简洁易用,缺点是比较繁琐。
  • nose,测试发现,发现并运行测试。
  • pytest,笔者目前喜欢用这个,写起来很方便,并且很多知名开源项目在用,推荐。
  • mock, 替换掉网络调用或者 rpc 请求等

python unittest测试实践

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        function_vale='foo'.upper()#表示的调用的API的返回的结果
        test_value='FOO'#测试用例的数据指:有可能是自己构造的,有可能是从别的地方抓取的结果
        self.assertEqual(function_vale, test_value)#表示的

    def test_isupper(self):
        function_vale1='FOO'
        function_vale2 = 'foo'
        self.assertTrue(function_vale1.isupper())
        self.assertFalse(function_vale2.isupper())

    def test_split(self):
        function_value= 'hello world'
        test_value=['hello', 'world']
        self.assertEqual(function_value.split(), test_value)
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            function_value.split(2)

if __name__ == '__main__':
    unittest.main()

继承 unittest.TestCase 就创建了一个测试样例。上述三个独立的测试是三个类的方法,这些方法的命名都以 test 开头。 这个命名约定告诉测试运行者类的哪些方法表示测试。

每个测试的关键是:调用 assertEqual() 来检查预期的输出; 调用 assertTrue() 或 assertFalse() 来验证一个条件;调用 assertRaises() 来验证抛出了一个特定的异常。使用这些方法而不是 assert 语句是为了让测试运行者能聚合所有的测试结果并产生结果报告。

通过 setUp() 和 tearDown() 方法,可以设置测试开始前与完成后需要执行的指令。 在 组织你的测试代码 中,对此有更为详细的描述。

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

在调用测试脚本时添加 -v 参数使 unittest.main() 显示更为详细的信息,生成如以下形式的输出:

test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

setUp与tearDown

可以在单元测试中编写两个特殊的setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。

setUp()和tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:

class TestDict(unittest.TestCase):

    def setUp(self):
        print('setUp...')

    def tearDown(self):
        print('tearDown...')

使用Pytest库进行测试 

import pytest
def add(a, b):
    assert all([isinstance(a, int), isinstance(b, int)])
    return a + b


def test_add():
    assert add(1, 2) == 3
    assert isinstance(add(1, 2) , int)
    with pytest.raises(Exception):    # test exception
        add('1', 2)

Python——单元测试的实现_测试方法

Python——单元测试的实现_测试方法_02

在运行test的时候如果是预见到这个错误的测试案例,那么久不会接下来运行新的测试案例了。

参考文章

https://docs.python.org/zh-cn/3/library/unittest.html

https://zhuanlan.zhihu.com/p/29968920

标签:function,__,Python,self,单元测试,实现,测试,test,unittest
From: https://blog.51cto.com/u_13643065/6169212

相关文章

  • python PIL个人使用记录
    pythonPIL个人使用记录1、gif转pngdefgif_to_png(filename:str):"""gif图片一帧一帧转换为很多png图片:paramfilename::return:"""filename=filename.strip()filename=os.path.abspath(filename)assertos.path.s......
  • Python系列005
    控制设备仪器————电源初识importpyvisa#ConnecttotheGPIBinstrumentrm=pyvisa.ResourceManager()classPiDevice:def__init__(self,addressId):self.addressId=addressIddefPiPower(self):whoPower=rm.open_resource(self.a......
  • 学习笔记——Python基础
    字符串索引str='我是一名学生'print(str[0])#输出“我”print(str[-6])#输出“我”字符串切片:把数据对象的一部分拿出来str='我是一名学生'print(str[2:4])#输出“一名”print(str[-4:-2])#输出“一名”#获取字符串长度:len()str='我是一名学生'le......
  • 跟着查老四学Python Day 6:文件操作和异常处理
    文件操作例行寒暄之后,课程正式开始查老四:好的,我们来学习一下Python中的文件操作。文件操作是编程中非常基础和重要的一部分,它允许我们读取和写入文件。Python支持文本文件和二进制文件的读写,下面我们来逐一介绍。首先,我们需要打开一个文件。Python中使用open()函数来打开文件,它的语......
  • 【Python】ini解析ERROR:没有实例属性‘__getintem__’
    abaquspython搭配ini时,出现AttributeError:ConfigParserinstancehasnoattribute'getitem'20230404edit情况错误代码:fromConfigParserimportConfigParserconf=ConfigParser()conf.read(IniFilePath)layupFile=conf['DampCal']['lay......
  • 如何基于AI算法实现智慧工厂视频大数据智能预警平台搭建?
    当前我国正处于数字经济高速发展的时代,企业正面临着数字化“转型升级”的需求。那么,工厂该如何实现智能化转型目标呢?EasyCVR视频融合平台与AI智能分析网关,融合了边缘AI智能识别技术,部署了多种AI算法,能实现人脸、人体、车辆、物体、行为等智能检测,在工厂的智慧转型场景中发挥着重要......
  • Python 内置函数map()
    内置函数mapmap(func,可迭代对象1,可迭代对象2...)map函数可以接收一个函数和一个或多个可迭代对象。接收的func函数有几个参数,就需要接收几个可迭代对象。map接收的函数会作用于可迭代对象的每个元素,并且返回一个值。map将可迭代对象的每个元素经过func函数处理返回的值组成......
  • flask:Flask 和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件
    目录一、Flask和pythonweb框架介绍1.1pythonweb框架介绍1.2flask介绍1.3wsgiref1.4用wsgirf和werkzeug写web二、flask快速使用三、登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件3.5知识点总结四、配置文件的使用方式1、设置方式一(测试中使用的......
  • 用python实现简单的版本号生成工具
    用python实现简单的版本号生成工具我们发布比较频繁,每次发布都需要从release分支打1个tag,不过可能是因为年纪大了的缘故吧,尽管借鉴了一些版本号的制定规则,不过每次我都记不太住,需要翻文档去重新复习,不如把这步自动化一下,为未来的自己节约一点时间,另外有了工具就好统一规则,后面所......
  • python-torch numpy matploit pandas
    title:深度学习基础torchnumpypandasmatplotlibnumpy数组对象是NumPy中最核心的组成部分,这个数组叫做ndarray,是“N-dimensionalarray”的缩写。其中的N是一个数字,指代维度.在NumPy中,数组是由numpy.ndarray类来实现的,它是NumPy的核心数据结构。而Python......