当前位置: 首页 > article >正文

pytest断言总结

pytest 中,可以使用多种方式进行断言,以验证测试用例的预期结果。以下是一些常见的断言方法:

1. 基本的断言

使用 Python 的内置 assert 语句进行断言。

def test_example():
    assert 1 == 1

2. 断言相等

使用 pytest 提供的 pytest 对象进行更详细的断言。

def test_equality():
    assert 1 == 1
    assert 1 != 2

3. 断言包含

检查一个对象是否包含另一个对象。

def test_inclusion():
    assert 'hello' in 'hello world'
    assert 'goodbye' not in 'hello world'

4. 断言真假

检查表达式的真值。

def test_truthiness():
    assert True
    assert not False

5. 断言异常

使用 pytest.raises 作为上下文管理器来断言代码块是否抛出异常。

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

6. 断言警告

使用 pytest.warns 来断言代码块是否发出特定的警告。

import warnings
def test_warning():
    with pytest.warns(UserWarning):
        warnings.warn("This is a warning", UserWarning)

7. 断言近似相等

对于浮点数,可以使用 pytest.approx 来断言两个数值近似相等。

def test_approx():
    assert 2.2 == pytest.approx(2.3)
    assert 2.0 == pytest.approx(2.0)

8. 断言集合

检查集合是否相等。

def test_set_equality():
    assert set([1, 2, 3]) == set([3, 2, 1])

9. 断言字典

检查字典是否相等。

def test_dict_equality():
    assert {'a': 1, 'b': 2} == {'b': 2, 'a': 1}

10. 断言回调函数

使用 pytest 提供的 pytest_assertrepr_comparepytest.register_assert_rewrite 进行更复杂的断言。

def test_callback():
    assert some_custom_condition(value)

11. 断言响应结构

对于更复杂的数据结构,可以使用 pytest 提供的 pytest 对象的内置方法,如 pytest.raisespytest.warns 等。

12. 断言字符串匹配

使用 pytestre 模块进行正则表达式匹配。

import re
def test_regex_match():
    assert re.search(r"foo", "foobar")

13. 断言列表长度

验证列表或集合的长度是否符合预期。

def test_list_length():
    assert len([1, 2, 3]) == 3

14. 断言多值

使用 pytest.mark.parametrize 进行参数化测试,并在每个参数组合中应用断言。

@pytest.mark.parametrize("a,b,expected", [(1, 2, 3), (2, 3, 5)])
def test_addition(a, b, expected):
    assert a + b == expected

15. 断言调用

使用 pytestmock 对象来断言某个对象的方法是否被调用。

from unittest.mock import Mock
def test_mock_call():
    mock_obj = Mock()
    mock_obj.some_method()
    mock_obj.some_method.assert_called_once()

16. 断言属性

检查对象的属性值。

def test_attribute():
    class MyClass:
        def __init__(self):
            self.my_attr = 42
    obj = MyClass()
    assert obj.my_attr == 42

17. 断言文件内容

验证文件内容是否符合预期。

def test_file_content():
    with open("test_file.txt", "r") as f:
        content = f.read()
    assert "expected content" in content

18. 断言异常消息

验证异常消息是否符合预期。

def test_exception_message():
    try:
        1 / 0
    except ZeroDivisionError as e:
        assert str(e) == "division by zero"

19. 断言浮点数精度

使用 pytest.approx 并指定精度。

def test_float_precision():
    assert 1.1 == pytest.approx(1.10001, abs=1e-5)

20. 断言迭代器

检查迭代器是否产生预期的元素。

def test_iterator():
    assert list(iter([1, 2, 3])) == [1, 2, 3]

21. 断言多态性

验证对象是否是特定类型或是否实现了特定的接口。

def test_type():
    assert isinstance(1, int)

http://www.kler.cn/a/281894.html

相关文章:

  • Docker 基础命令介绍和常见报错解决
  • 记录java Collections.sort踩的坑
  • 智谱AI清影升级:引领AI视频进入音效新时代
  • STM32串口——5个串口的使用方法
  • springboot上传下载文件
  • 【Nginx】反向代理Https时相关参数:
  • 代码随想录算法训练营第58天|拓扑排序精讲、dijkstra(朴素版)精讲
  • docker内安装miniconda
  • (十六)Flink 状态管理
  • [论文笔记] eval-big-refactor lm_eval 每两个任务使用一个gpu,并保证端口未被使用
  • 网络爬虫--生成假数据
  • uniapp icons图标不显示的问题解决
  • Python爬虫(一文通)
  • Leetcode 131.分割回文串 回溯 C++实现
  • 淘宝扭蛋机小程序,市场发展下的潜在机遇
  • Vue(三)内置指令v-text、html、cloak、once、pre;自定义指令的三种方式、Vue生命周期
  • 如何切换当前使用的IP代理协议
  • 【网络安全】服务基础第一阶段——第二节:Windows系统管理基础----虚拟化IP地址以及用户与组管理
  • 一起搭WPF之列表界面设计
  • [每日一练]查询结果的质量和占比(布尔值的灵活使用)
  • 猫咪掉毛如何清理?希喂、范罗士宠物空气净化器性能比拼
  • 嵌入式UI开发-lvgl+wsl2+vscode系列:11、SSD202移植运行评估demo程序
  • vue ref和reactive区别
  • 在发布您的插件之前,如何在 ONLYOFFICE 插件市场中进行测试?
  • 如何在Java爬虫中设置代理IP:详解与技巧
  • python使用多进程multiprocessing