问题在于@pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
不起作用,因为代码是参数化变量。我尝试了一些不同的方法,包括静态类成员,全局变量,并将其设置在expected_setup
固定装置中。这些都不起作用(按预期)
@pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
E NameError: name 'code' is not defined
params = [
cls1,
cls2,
cls3,
cls4
]
@pytest.mark.parametrize('code', params, ids=list(map(str, params)))
class TestContextExit(object):
@pytest.fixture(autouse=True)
def expected_setup(self, code):
self.str1 = 'JETFUEL'
self.str2 = 'OPERATIONNORTHWOODS'
self.setup = NewStore(self.str1, self.str2, code)
def test1(self, code):
assert self.root.results.result_code == expected_result_code
assert self.root.results.ta['result_code'] == expected_result_code.code
assert self.root.results.result_code == expected_result_code
@pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
def test2(self, code):
assert self.setup.root['code'] == code
@pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
def test3(self, code):
assert self.setup.root['setup'] == NOERROR
有什么想法或模式吗?在查看xfail pytest文档时,除了作为参数的一部分之外,我没有看到任何针对参数设置失败的示例。但是在这种情况下,该类已被参数化,只有两个类测试变成xfails,而不是所有测试。
答案 0 :(得分:0)
您可以在参数化过程中使用带有xfail标记的pytest.param作为参数值来对参数进行xfail
@pytest.mark.parametrize(code, [1,pytest.param(0,marks=pytest.mark.xfail(reason="reasons")]
def test_a():
assert code
这用于标记某些参数化值。这将使第二项测试失败。