小编Li *_*eng的帖子

如何让pytest在非测试模块中重写assert

我们在一个单独的python文件中定义了所有自定义断言,该文件不是测试模块.

例如: custom_asserts.py

class CustomAsserts(object):
    def silly_assert(self, foo, bar):
        assert foo == bar , 'some error message'
Run Code Online (Sandbox Code Playgroud)

如果我们assert直接在测试中使用,我们将获得有关AssertionError的额外信息,这非常有用.

在测试中直接使用断言的输出:

>       assert 'foo' == 'bar', 'some error message'
E       AssertionError: some error message
E       assert 'foo' == 'bar'
E         - foo
E         + bar
Run Code Online (Sandbox Code Playgroud)

但我们发现,如果我们调用我们在单独模块中定义的断言方法,则不会显示额外信息.

from custom_asserts import CustomAsserts
asserts = CustomAsserts()
def test_silly():
    asserts.silly_assert('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)

运行测试后输出:

>       assert 'foo' == 'bar', 'some error message'
E       AssertionError: some error message
Run Code Online (Sandbox Code Playgroud)

我们还在pytest docs中发现了这一点:高级断言内省

pytest只重写由其测试收集过程直接发现的测试模块,因此在支持模块中断言,这些模块本身不是测试模块,不会被重写.

所以我的问题是,有没有办法让pytest像测试模块那样对其他模块执行相同的断言重写?或者有任何hacky方式来实现这一目标?

python pytest

6
推荐指数
1
解决办法
1384
查看次数

标签 统计

pytest ×1

python ×1