Python pytest没有显示断言差异

时间:2019-02-20 22:58:23

标签: python automated-tests tdd pytest assert

以下测试:

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

此消息的含义不尽如人意,没有告诉您名称的含义是什么,为什么?

1 个答案:

答案 0 :(得分:0)

来自docs

  

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

     

您可以在导入模块之前调用register_assert_rewrite来手动启用断言重写,方法是在conftest.py中进行操作。