Python pytest不显示断言差异

问题描述 投票:0回答:1

以下测试:

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

这条消息没有提供信息,因为它没有告诉你名称的价值是什么,为什么?

python automated-tests tdd pytest assert
1个回答
0
投票

来自docs

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

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

© www.soinside.com 2019 - 2024. All rights reserved.