ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pytest-断言重写

2022-05-19 01:02:09  阅读:223  来源: 互联网

标签:func 断言 py pytest assert Pytest 模块 重写


1 pytest.register_assert_rewrite-断言重写

pytest是使用普通的断言语句以及断言失败时表达式的详细内省,仅重写测试模块本身以及作为插件一部分的任何模块,任何其他导入的模块都不会被重写,并且会发生正常的断言行为。

换言之:如果你在其他模块中有断言,你需要启用断言重写,你需要pytest在导入之前明确要求重写这个模块。

注册一个或多个要在导入时重写的模块名称,此函数将确保此模块或程序包内的所有模块将重写其assert语句。

举个例子:

example.py里面含有assert断言

1 def func():
2     b = 1
3     assert b == 0

pytest项目 test_func.py 中要导入 example.py 模块中的函数

1 from example import func
2 
3 def test_func():
4     func()

此时运行 python -m pytest -v test_func.py 会产生如下结果,它将不会打印有关断言失败原因的调试信息(即b的值为1)

 注意:如果我将 func() 函数定义放在 test_func.py 文件中,则会得到预期的结果

 

 

看出两者的区别了吗?在于是否会打印有关断言失败原因的调试信息(即b的值为1)

 

解决方案:

可以使用 pytest.register_assert_rewrite 函数来为您的模块启用此功能,从模块导入函数之前,必须先调用register_assert_rewrite;可以将其放入conftest.py

1 #----conftest.py
2 import pytest
3 # 导入同级目录example.py
4 pytest.register_assert_rewrite("example")
5 # 导入其他包的模块
6 pytest.register_assert_rewrite("foo.example")

 

前面有个命令你会发现与平时的 pytest 执行命令不太一样, python -m pytest -v test_func.py ,如果你单纯使用命令 pytest -v test_func.py 执行时将会引发导入模块(找不到模块)的错误。

具体详情请看参考文章【3】

 

本文参考一下文章:

【1】用pytest描述导入函数中的失败断言语句

【2】Pytest权威教程-19插件编写

【3】pytest执行用例时返回异常ModuleNotFoundError: No module named ‘***‘

标签:func,断言,py,pytest,assert,Pytest,模块,重写
来源: https://www.cnblogs.com/sheehan-dali/p/16286964.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有