我们在一个不是测试模块的单独python文件中定义了所有的定制断言。如何让pytest重写在非测试模块中断言
例如: custom_asserts.py
class CustomAsserts(object):
def silly_assert(self, foo, bar):
assert foo == bar , 'some error message'
如果我们直接在测试中使用assert
,我们会得到关于AssertionError的,这是非常有用的额外的信息。
的直接使用断言测试输出:
> assert 'foo' == 'bar', 'some error message'
E AssertionError: some error message
E assert 'foo' == 'bar'
E - foo
E + bar
但我们发现,如果我们所说的,我们在不同的模块定义的断言方法,额外的信息将不会显示。运行测试后
from custom_asserts import CustomAsserts
asserts = CustomAsserts()
def test_silly():
asserts.silly_assert('foo', 'bar')
输出:
> assert 'foo' == 'bar', 'some error message'
E AssertionError: some error message
而且我们也发现了这个在pytest文档:Advanced assertion introspection
pytest仅重写它的测试 采集过程中直接发现的测试模块,所以断言在支持不是 的模块本身,测试模块将不会被重写。
所以我的问题是,有没有办法让Pytest像测试模块一样对其他模块执行相同的断言重写?或者有没有什么奇怪的方式来实现这一目标?
[回答你自己的问题很好,甚至鼓励!](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)网络用户界面甚至建议您可能希望编写问题并立即回答问题,就像记录和分享在开发软件时发现的重要事项的方法一样。 – clacke