pytest中的assert断言

部署运行你感兴趣的模型镜像

pytest 中,虽然底层仍使用 Python 原生的 assert 语句,但框架通过重写断言机制提供了“两种”不同层次的断言体验,通常被概括为:

1. 普通断言(Plain assert)

直接写 Python 原生的 assert <表达式>,pytest 会在失败时自动重写断言信息,给出详细的左值、右值、中间变量等上下文。
示例:

def test_plain():
    a = 1
    b = 2
    assert a + b == 4          # 失败时 pytest 会打印出 3 != 4

2. 辅助断言(Assertion helpers)

利用 pytest 自带的辅助函数(或第三方插件如 pytest-check)把多个断言打包、延迟报告,或提供领域专用的比较语义。
常见内置辅助:

  • pytest.raises(ExpectedException) —— 断言代码块抛指定异常
  • pytest.warns(UserWarning) —— 断言代码块发出指定警告
  • pytest.approx(value, rel=1e-6, abs=1e-12) —— 浮点近似比较
    示例:
import pytest

def test_helpers():
    with pytest.raises(ZeroDivisionError):
        1 / 0

    assert 3.1415 == pytest.approx(3.14, rel=1e-2)

总结:
“两种断言方式”并不是语法上两种关键字,而是指
a) 直接用 assert + pytest 的自动重写;
b) 借助 pytest 提供的上下文管理器/辅助函数来完成更复杂的断言需求。

assert断言失败

在 pytest 里写 assert 时,一旦条件为 False,pytest 会立即:

​ (1)抛出 AssertionError(测试因此失败)。

​ (2)把失败的断言语句做“重写”,在终端里给出非常详细的上下文,例如

assert a + b == 4

失败时会看到

>       assert a + b == 4
E       assert 3 == 4
E        +  where 3 = 1 + 2

变量值、中间表达式、列表/字典 diff 都会列出来。

​ (1)该测试函数终止,后续代码不再执行;pytest 把它标记为 FAILED(一个 F)。

​ (2)继续跑其余测试,最终报告里会统计失败条数,并给出失败用例的 traceback、stdout、stderr 等。

总结:assert 失败 → 测试当场失败,pytest 打印详细诊断,函数中断,但整个会话继续。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林宴.

感谢各位大佬光临

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值