精进单元测试技能——Pytest断言的艺术

news2024/9/20 6:14:12

本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。

图片

了解断言的基础

在Pytest中,断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等,例如:

def test_addition():    result = add(2, 3)    assert result == 5

然而除此之外,Pytest提供了更多丰富的断言方式,包括逻辑表达式、集合比较、异常捕获等,这些功能使得我们能够更全面地覆盖测试场景。

图片

利用逻辑表达式

Pytest的断言支持丰富的逻辑表达式,使得我们可以更灵活地组合多个条件。例如,我们可以使用 and ornot 等关键词来连接多个断言,从而实现更复杂的测试逻辑:

def test_complex_logic():    result = some_complex_function()    assert result > 0 and result % 2 == 0

通过充分利用逻辑表达式,我们能够在一个测试用例中覆盖多个相关的断言,从而提高测试的全面性和可读性。

图片

集合比较

在实际的测试中,有时我们需要比较集合之间的差异,Pytest提供了 assert set1 == set2 的方式来完成这样的比较。这对于验证返回的无序集合是否符合预期非常有用:

def test_set_comparison():    result = get_some_data()    expected_set = {1, 2, 3, 4, 5}    assert set(result) == expected_set

通过集合比较,我们能够简洁而清晰地验证无序集合的相等性,确保测试的准确性。

图片

异常断言

在编写测试用例时,经常需要验证某个函数是否能够正确地抛出异常。Pytest提供了 pytest.raises 装饰器来实现异常断言:

import pytestdef test_exception():    with pytest.raises(ValueError, match='Invalid value'):        raise ValueError('Invalid value')

通过使用 pytest.raises,我们可以明确地指定期望的异常类型,并且可以通过 match 参数验证异常消息是否符合预期。这样的断言方式使得我们能够更精确地检查代码中的异常处理逻辑。

图片

定制断言函数

为了提高测试用例的可维护性,我们可以考虑编写定制的断言函数,使得测试用例更加简洁而易读。例如,我们可以编写一个用于验证两个浮点数是否在一定误差范围内相等的断言函数:​​​​​​​

def assert_float_equal(value1, value2, epsilon=1e-6):    assert abs(value1 - value2) < epsilondef test_float_comparison():    result = calculate_float()    expected_result = 3.14159    assert_float_equal(result, expected_result)

通过编写定制的断言函数,我们不仅能够提高测试用例的可读性,还能够在后续的维护过程中更轻松地调整断言逻辑。

图片

使用参数化测试

Pytest提供了参数化测试的功能,使得我们能够在同一个测试用例中使用不同的参数运行多次测试,进而提高测试的覆盖范围。结合参数化测试和断言,我们能够更全面地验证代码的不同输入组合。​​​​​​​

import pytest@pytest.mark.parametrize("input_data, expected_result", [    ((2, 3), 5),    ((-1, 1), 0),    ((0, 0), 0),])def test_addition(input_data, expected_result):    result = add(*input_data)    assert result == expected_result

通过参数化测试,我们可以轻松地扩展测试用例,验证不同输入情况下的函数行为,而断言则保证了每个参数组合的准确性。

图片

结合文档和注释

在编写测试用例时,良好的文档和注释是确保测试易于理解和维护的关键。通过在测试用例中添加清晰的注释,解释每个断言的目的和期望结果,可以帮助其他开发者更容易地理解测试的目的。​​​​​​​

def test_complex_behavior():    # Ensure that the function behaves correctly in normal cases    result = some_complex_function()    assert result > 0
    # Ensure that a specific edge case is handled properly    edge_result = some_complex_function(0)    assert edge_result == 42

结合文档和注释,我们能够更清晰地传达测试的目的和预期,使得测试用例更易于维护和理解。

合理利用Pytest提供的断言方式是提高测试质量和效率的关键。通过深入了解不同的断言方式,并在实践中灵活应用,我们能够编写出更具表达力和可维护性的测试用例,从而提高代码的质量和稳定性。在日常的开发工作中,不断学习和掌握断言的艺术,将为我们打造高效而可靠的测试奠定坚实基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1367737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云域名外部入库流程

注册商是腾讯云&#xff0c;且在腾讯云管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是腾讯云但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录腾讯云获取账号ID信息。…

人类认知中的等价机理与机器智能中等价机理

人类认知中的等价机理是指人们在认知过程中&#xff0c;通过将不同的概念、事物或情境进行等价替代&#xff0c;从而实现思维的连贯和理解的补充。例如&#xff0c;当人们看到一个陌生的动物时&#xff0c;可以将它与已知的动物进行等价对应&#xff0c;从而理解其特征和行为。…

社交心不死:支付宝内测兴趣社交

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 支付宝又双叒做社交了&#xff0c;这次的“兴趣社区”能成吗&#xff1f; 支付宝做社交心不死&#xff0c;近期支付宝又开始内测名为“兴趣社区”的功能。主打找同频玩伴&#xff0c;徒步、骑行、钓鱼&#xff0c…

将本地文件传到远程仓库

工具&#xff1a;gitee、visual studio 2022 语言&#xff1a;C语言 1、在创建项目的时候&#xff0c;将项目存储于自己创建的仓库的本地存储位置&#xff0c;并编写代码 2、先选择仓库&#xff0c;然后单击鼠标右键——>TortoiseGit——>Add..&#xff08;将代码添加到…

Spring 见解 6 Spring事务控制

Spring事务控制 事务介绍 什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句…

Android Studio安卓读写NFC Ntag标签源码

本示例使用的发卡器&#xff1a; https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.3513789erHXVGx&id615391857885 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout x…

5.2 Android BCC环境搭建(adeb版,下)更新中

五&#xff0c;运行adeb shell adeb shell 六&#xff0c;其他指令 6.1 从开发机移除adeb adeb remove 6.2 更新开发机adeb deb git-pull 6.3 使用ssh替代adeb进行与android设备的通信 adeb --ssh <uri> --sshpass <pass> <cmd> 七&#xff0c;BCC配置…

项目知识—SSM及之后02

1、resultMap写的Base内容必须保证select都使用上 2、VALUE单个 &#xff0c;VALUES多个 3、 一对多&#xff0c;两张表&#xff0c;多的表加外键 比如班级和学生就是一对多&#xff0c;查就是按照学生表去查询 多对多&#xff0c;三张表&#xff0c;关系表加外键 4、数据…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(11)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置&#xff08;10&#xff09; 2.3 PCI桥与PCI设备的配置空间 PCI设备都有独立的配置空间&#xff0c;HOST主桥通过配置读写总线事务访问这段空间。PCI总线规定了三种类型的PCI配置…

在当前bash(sh)中执行脚本和注册函数

在研究《管理Python虚拟环境的脚本》时&#xff0c;我们使用了source指令而没有使用sh或者bash来执行脚本&#xff0c;就是因为source指令可以让脚本在当前bash(sh)中执行&#xff1b;而sh或者bash则会新启动一个bash来执行。 我们可以通过下面这个脚本做测试 # test.sh # 用…

上海亚商投顾:沪指再度失守2900点 全市场超4800只个股下跌

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日继续调整&#xff0c;沪指跌超1%再度失守2900点&#xff0c;深成指、创业板指均创出调整新低&…

图文详解:CRM系统的功能有哪些?

在如今多数行业市场充分竞争的情况下&#xff0c;同质化产品层出不穷&#xff0c;什么样的企业可以在市场中屹立不倒&#xff1f;必然是拥有广泛稳定的客户群体的企业&#xff0c;所以强大的客户关系管理能力就成为了企业的核心竞争力。 在SaaS发展到今日&#xff0c;基于云服…

MySQL之子查询、连接查询(内外)以及分页查询(实操)

文章目录 前言一、SQL脚本二、实操以及实现思路 前言 续上篇博主MySQL之视图&索引&执行计划这篇给大家讲解MySQL之子查询、连接查询(内&外)以及分页查询 一、SQL脚本 /*Navicat Premium Data TransferSource Server : localhostSource Server Type :…

前端JS加密对抗由浅入深-2

前言&#xff1a; 本文主要讲解&#xff0c;针对前端非对称、多段加密数据传输站点&#xff0c;如何进行动态调试&#xff0c;如何进行安全测试。本次讲解不涉及任何漏洞方面&#xff0c;仅为学习探讨&#xff0c;该站点现已经更改加密方式&#xff0c;严禁非法测试&#xff0…

基于SSM的校园线上订餐系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;vue\html 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…

振弦采集仪在桥梁结构监测中的应用研究

振弦采集仪在桥梁结构监测中的应用研究 振弦采集仪在桥梁结构监测中的应用研究是指利用振弦采集仪对桥梁结构进行监测和数据采集的研究。振弦采集仪是一种能够实时监测桥梁结构振动情况的设备&#xff0c;通过采集桥梁上的振弦传感器获取振动数据&#xff0c;并将数据传输到监…

ubuntu系统(9):ubuntu 20.02安装pydot

目录 警告信息 1、确保安装了Python和pip 2、安装Graphviz软件包 3、pip安装pydot 验证 在gem5中&#xff0c;pydot库用于生成图形化输出&#xff0c;特别是生成.dot文件和相关的图像文件&#xff0c;如PDF、PNG等。它与gem5结合使用的一个常见用途是生成系统结构图、内存…

Git命令+github仓库克隆

Git github Git常用命令 开始 git init #创建仓库 git status #查看仓库的状态 git status -s #简单的查看仓库的状态 git ls-files #查看暂存区的内容 git reflog #查看操作的历史记录 暂存区 git add git add <file&g…

1-05使用VS调式程序

一、概述 写代码总不是一帆风顺的&#xff0c;总会碰到一些问题&#xff0c;检查问题&#xff0c;排除错误&#xff08;也就是Debug程序&#xff09;&#xff0c;对于任何程序员而言都是基本功。 我们前面讲过&#xff0c;C语言是一门很容易出错&#xff0c;且自身不提供异常…

[DM8] 达梦8配置兼容Oracle

查看版本信息 select *&#xff0c;id_code from v$version; 查询解释&#xff1a; DM Database Server 64 V8 1-1-190-21.03.12-136419-ENT 64 版本位数标识&#xff0c;64表示为64位版本&#xff0c;无64则表示为32位版本 V8 大版本号&#xff0c;目前主要是V7、V8 1-1-190…