pytest
非常精彩assert introspection
因此很容易找到字符串的差异,特别是如果差异在空白区域。现在我使用了一个稍微复杂的测试助手,我在许多测试用例中重用了它。帮助器也有自己的模块,对于那个模块,我想添加断言内省。
helpers.py:
...
def my_helper():
assert 'abcy' == 'abcx'
test_mycase.py:
from .helpers import my_helper
def test_assert_in_tc():
assert 'abcy' == 'abcx'
def test_assert_in_helper():
my_helper()
测试报告显示了测试中断言的有用信息,但not for asserts within the helper
:
=============================================================== FAILURES ================================================================
___________________________________________________________ test_assert_in_tc ___________________________________________________________
def test_assert_in_tc():
> assert 'abcy' == 'abcx'
E assert 'abcy' == 'abcx'
E - abcy
E ? ^
E + abcx
E ? ^
tests/test_pytest_assert.py:9: AssertionError
_________________________________________________________ test_assert_in_helper _________________________________________________________
def test_assert_in_helper():
> my_helper()
tests/test_pytest_assert.py:13:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def my_helper():
> assert 'abcy' == 'abcx'
E AssertionError
tests/helpers.py:258: AssertionError
======================================================= 2 failed in 0.24 seconds ========================================================
作为一种解决方法,我使用断言输出附加信息,但输出仍然看起来很奇怪并使代码爆炸。有什么想法我可以在帮助文件中激活pytest断言内省吗?
我发现different, but related question很遗憾我到目前为止无法解决问题:
import pytest
from .helpers import my_helper
pytest.register_assert_rewrite('helpers.my_helper')
答案 0 :(得分:10)
我必须将register_assert_rewrite放入tests / __ init__.py中,如下所示:
import pytest
# we want to have pytest assert introspection in the helpers
pytest.register_assert_rewrite('tests.helpers')