我想定义自定义函数,例如foo()和bar()。 我想用断言注册foo(),bar()等,这样当调用assert时,应该调用这些方法。此外,是否可以根据条件调用回调(例如,如果assert的计算结果为True)?
由于 沙拉德帕
答案 0 :(得分:0)
修改强>
实际上,进一步研究你的问题,也许你想要这样的事情 - 实现你自己的pytest_assertrepr_compare
并基于此调用foo
和bar
:
https://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
方法。