gpt4 book ai didi

assert - pytest 中的自定义断言应该覆盖标准断言

转载 作者:行者123 更新时间:2023-12-04 16:45:20 27 4
gpt4 key购买 nike

我使用 pytest_assertrepr_compare 编写了一个自定义断言函数来比较两个列表中的项目,这样顺序并不重要。这工作正常,并且当列表内容不同时报告失败。

但是,如果自定义断言通过,则默认“==”断言会失败,因为一个列表的第 0 项与另一个列表的第 0 项不相等。

有没有办法阻止默认断言启动?

assert ['a', 'b', 'c'] == ['b', 'a', 'c'] # custom assert passes 
# default assert fails

自定义断言函数是:

def pytest_assertrepr_compare(config, op, left, right):
equal = True
if op == '==' and isinstance(left, list) and isinstance(right, list):
if len(left) != len(right):
equal = False
else:
for l in left:
if not l in right:
equal = False
if equal:
for r in right:
if not r in left:
equal = False
if not equal:
return ['Comparing lists:',
' vals: %s != %s' % (left, right)]

最佳答案

我找到了最简单的组合方式 py.test & pyhamcrest 。在您的示例中,很容易使用 contains_inanyorder 匹配器:

from hamcrest import assert_that, contains_inanyorder

def test_first():
assert_that(['a', 'b', 'c'], contains_inanyorder('b', 'a', 'c'))

关于assert - pytest 中的自定义断言应该覆盖标准断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36055388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com