通過py.test,我經常生成測試,其中一些測試用例預計會失敗。我如何將它們標記爲xfail?如果我將@py.test.mark.xfail
放在測試函數上,則意味着它的所有實例都是xfail。如果我在測試中做py.test.xfail()
它實際上不通過測試,不只是將它標記爲xfail。有什麼我可以用metafunc來添加這個標記嗎?如何將一些生成的測試標記爲xfail/skip?
例如
# 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
看起來很複雜。它可以用更簡單的方法重寫嗎?就像使用應該傳遞的值列表和應該失敗的值列表創建一個測試。 – demalexx
@demalexx這個例子確實是過度工程,但它只是一個最小的工作示例。在我的實際測試中,測試數據和測試本身還有很多事情要做。 – pfctdayelise