Python pytest 不显示断言差异

vec*_*cin 6 python tdd automated-tests assert pytest

以下测试:

def test_something():
    assert "ddd" == "pepe"
Run Code Online (Sandbox Code Playgroud)

使用 pytest 运行时会出现此错误消息:

E       AssertionError: assert 'ddd' == 'pepe'
E         - ddd
E         + pepe
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将 assert 方法移动到不同的文件assertion.py

class CustomerAssertor(object):
    def __init__(self,name):
        self.name =name

    def assert_name(self,expected):
        assert self.name ==expected
Run Code Online (Sandbox Code Playgroud)

我们将测试更改为:

from sql_gen.test.utils.assertion_util import CustomerAssertor

def test_something():
    CustomerAssertor("ddd").assert_name("pepe")
Run Code Online (Sandbox Code Playgroud)

现在我收到以下错误:

self = <assertions.CustomerAssertor object at 0x7fbcc3d31588>, expected = 'pepe'

    def assert_name(self,expected):
>       assert self.name ==expected
E       AssertionError
Run Code Online (Sandbox Code Playgroud)

此消息的信息量并不大,因为它没有告诉您名称的值是什么,为什么?

use*_*ica 10

文档

通过在运行之前重写断言语句来报告有关失败断言的详细信息。重写的断言语句将内省信息放入断言失败消息中。pytest仅重写由其测试收集过程直接发现的测试模块,因此不会重写支持模块中的断言,而这些模块本身不是测试模块

您可以通过在导入之前调用register_assert_rewrite来手动为导入的模块启用断言重写(在 中这样做的好地方conftest.py)。