Pytest:将参数化装置与预期结果相关联
Pytest: associate parameterized fixtures with expected results
假设我有以下测试:
@pytest.fixture(params=['a'])
def ascii(request):
return ord(request.param)
def test_ascii(ascii):
assert ascii == 97
效果很好。现在说我想添加 'b'
作为参数。理想情况下,我可以用 @pytest.mark.parametrize('ascii_val', [97, 98])
之类的东西装饰测试,添加 ascii_val
作为测试的补充并断言 ascii == ascii_val
。然而,Pytest 也会断言 'a'
反对 98 和 'b'
反对 97.
有什么方法可以让我将 'a'
与 97 关联起来,将 'b'
与 98 关联起来吗?我问是因为我将进行很多测试,例如 test_ascii
,在这些测试中,我将检查某些输入是否在给定不同分析技术的情况下始终输出相同的输出。
至少对于您给出的简单示例,为什么要使用参数化夹具而不是参数化您的测试?
像这样的东西应该可以工作:
@pytest.mark.parametrize('char, expected', [('a', 97), ('b', 98)])
def test_ascii(char, expected):
assert ord(char) == expected
如果您真的想使用固定装置,您总是可以 return 从中提取 (char, expected)
元组并使用它。
假设我有以下测试:
@pytest.fixture(params=['a'])
def ascii(request):
return ord(request.param)
def test_ascii(ascii):
assert ascii == 97
效果很好。现在说我想添加 'b'
作为参数。理想情况下,我可以用 @pytest.mark.parametrize('ascii_val', [97, 98])
之类的东西装饰测试,添加 ascii_val
作为测试的补充并断言 ascii == ascii_val
。然而,Pytest 也会断言 'a'
反对 98 和 'b'
反对 97.
有什么方法可以让我将 'a'
与 97 关联起来,将 'b'
与 98 关联起来吗?我问是因为我将进行很多测试,例如 test_ascii
,在这些测试中,我将检查某些输入是否在给定不同分析技术的情况下始终输出相同的输出。
至少对于您给出的简单示例,为什么要使用参数化夹具而不是参数化您的测试?
像这样的东西应该可以工作:
@pytest.mark.parametrize('char, expected', [('a', 97), ('b', 98)])
def test_ascii(char, expected):
assert ord(char) == expected
如果您真的想使用固定装置,您总是可以 return 从中提取 (char, expected)
元组并使用它。