在pytest中,您可以通过以下方式注册钩子以提供自定义断言消息:
def pytest_assertrepr_compare(config, left, right, op):
if isinstance(left, Foo) and isinstance(right, Foo):
return ["Assert failed because Foo!"]
这仅适用于以下形式的测试:
assert Foo() == Foo()
assert 5 is 6
assert "char" in "mychar"
assert 10 > 20
,依此类推。它不适用于单个操作数表达式:
assert Foo()
assert ProduceValue()
如果使用特定值调用assert,是否可以编写一个显示自定义断言消息的钩子?我不需要所有值都发生这种情况,仅在评估特定类时会发生这种情况。如果有另一种方法可以使带有自定义断言的测试“失败”,那也可以。