【问题标题】:Python pytest does not show assertion differencesPython pytest 不显示断言差异
【发布时间】:2019-02-20 22:58:23
【问题描述】:

以下测试:

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】:

    来自docs

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

    您可以在导入模块之前通过调用register_assert_rewrite 手动为导入的模块启用断言重写(在conftest.py 中执行此操作的好地方)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2017-02-27
      相关资源
      最近更新 更多