以下测试:
def test_something():
assert "ddd" == "pepe"
与pytest一起运行时会显示以下错误消息:
E AssertionError: assert 'ddd' == 'pepe'
E - ddd
E + pepe
但是,如果我们将assert方法移动到另一个文件assertion.py
:
class CustomerAssertor(object):
def __init__(self,name):
self.name =name
def assert_name(self,expected):
assert self.name ==expected
然后我们将测试更改为:
from sql_gen.test.utils.assertion_util import CustomerAssertor
def test_something():
CustomerAssertor("ddd").assert_name("pepe")
现在出现以下错误:
self = <assertions.CustomerAssertor object at 0x7fbcc3d31588>, expected = 'pepe'
def assert_name(self,expected):
> assert self.name ==expected
E AssertionError
此消息的含义不尽如人意,没有告诉您名称的含义是什么,为什么?
答案 0 :(得分:0)
来自docs:
有关失败的断言的报告详细信息是通过在断言语句运行之前重写它们来实现的。重写的断言语句将自省信息放入断言失败消息中。
pytest
仅重写通过其测试收集过程直接发现的测试模块,因此支持模块本身不是测试模块的声明将不会被重写。您可以在导入模块之前调用register_assert_rewrite来手动启用断言重写,方法是在
conftest.py
中进行操作。