有没有办法在pytest(python)中使用assert注册回调方法/代码片段?

时间:2016-03-23 04:20:23

标签: python pytest

我想定义自定义函数,例如foo()和bar()。 我想用断言注册foo(),bar()等,这样当调用assert时,应该调用这些方法。此外,是否可以根据条件调用回调(例如,如果assert的计算结果为True)?

由于 沙拉德帕

2 个答案:

答案 0 :(得分:0)

修改

实际上,进一步研究你的问题,也许你想要这样的事情 - 实现你自己的pytest_assertrepr_compare并基于此调用foobarhttps://pytest.org/latest/assert.html#defining-your-own-assertion-comparison

# content of conftest.py
from test_foocompare import Foo
def pytest_assertrepr_compare(op, left, right):
    if isinstance(left, Foo) and isinstance(right, Foo) and op == "==":
        return ['Comparing Foo instances:',
                '   vals: %s != %s' % (left.val, right.val)]

# content of test_foocompare.py
class Foo:
    def __init__(self, val):
        self.val = val

    def __eq__(self, other):
        return self.val == other.val

def test_compare():
    f1 = Foo(1)
    f2 = Foo(2)
    assert f1 == f2

以下原始答案:

由于断言会引发异常,你可以试试像

这样的东西
try:
    assert(whatever)
except AssertionError as e:  # Or whatever other exception you expect
    foo()                    # Call your function
    raise e                  # Reraise to make your test fail

答案 1 :(得分:0)

如果您可以使用pyhamcrest而不是内部py.tests assert。因此,可以使用钩子或其他东西重新实现assert_that方法。