gpt4 book ai didi

python - 如何将一些生成的测试标记为 xfail/skip?

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:40 25 4
gpt4 key购买 nike

我经常使用 py.test 生成测试,其中一些测试用例预计会失败。我怎样才能将它们标记为 xfail?如果我将 @py.test.mark.xfail 放在测试函数上,则意味着它的所有实例都是 xfail。如果我在测试中执行 py.test.xfail() 它实际上未通过测试,而不仅仅是将其标记为 xfail。我可以用 metafunc 做些什么来添加这个标记吗?

例如

# code - function with a bug :)

def evenHigherThanSquare(n):
return n**2


# test file

def pytest_generate_tests(metafunc):
data = [
(2, 4),
(3, 10), # should be xfail
(4, 16),
(5, 26), # should be xfail
]
for input, expected in data:
if metafunc.function is test_evenHigherThanSquare:
metafunc.addcall(funcargs=dict(input=input, expected=expected))


def test_evenHigherThanSquare(input, expected):
assert evenHigherThanSquare(input) == expected

最佳答案

当然,您可以使用 funcarg factoryapply an xfail marker (since 1.3.2) :

def pytest_generate_tests(metafunc):
data = [
# input # output # is expected to fail?
(2, 4, False),
(3, 10, True),
(4, 16, False),
(5, 26, True),
]
for input, expected, xfail in data:
if metafunc.function is test_evenHigherThanSquare:
metafunc.addcall(funcargs=dict(input=input, expected=expected),
param=xfail)


def pytest_funcarg__xfail(request):
if request.param:
request.applymarker(py.test.mark.xfail)


def test_evenHigherThanSquare(input, expected, xfail):
assert evenHigherThanSquare(input) == expected

这里我们使用test_evenHigherThanSquare未使用的xfail参数来触发对每个测试项的pytest_funcarg__xfail调用;它使用提供给 metafunc.addcallparam 来决定是否让测试失败。

Funcarg 工厂更常用于生成在收集时创建成本高昂的参数,但应用标记也是一种完全受支持的用法。

关于python - 如何将一些生成的测试标记为 xfail/skip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364801/

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