我有一个工作良好的可参数化的夹具。下面的函数是一个具有相同行为的虚拟函数。
@pytest.fixture(scope="function")
def parametrizable_fixture(parameters):
return parameters这在大多数测试中运行良好,如下所示:
@pytest.mark.parametrize("parameters", [["param 1", "param 2"]])
def test_dummy(parametrizable_fixture):
assert parametrizable_fixture == ["param 1", "param 2"]但是,如果我想将另一个夹具(如下面所定义的)作为第一个夹具的参数,则测试失败:
@pytest.fixture(scope="function")
def param2fixture():
return "param 2"
@pytest.mark.parametrize("parameters", [["param 1", pytest.lazy_fixture("param2fixture")]])
def test_dummy_2(parametrizable_fixture):
assert parametrizable_fixture == ["param 1", "param 2"]惰性夹具没有被它应该具有的值所取代,即我得到了以下错误消息:
E assert ['param 1', <LazyFixture "param2fixture">] == ["param 1", "param 2"]编辑:这些例子使用夹具作为参数,长度在两个列表中。这只是为了简化问题。对于这些作为参数的惰性夹具的数量或位置没有任何限制。
发布于 2021-12-28 18:52:02
您正在尝试将参数(parameters)的一部分替换为惰性夹具,但这只适用于整个参数。
修复示例的最简单方法是使用2个参数:
@pytest.mark.parametrize("arg1,arg2",
[["param 1", lazy_fixture("param2fixture")]])
def test_dummy_2(arg1, arg2):
assert (arg1, arg2) == ("param 1", "param 2")正如注释中提到的那样,这并不能解决原始问题的情况,因为元组中的元素数量并不固定。在pytest中有一个相关问题 --懒散夹具,而拉扯请求旨在解决这个问题--如果你觉得冒险,你可以把PR应用到叉子上,然后试一试。正如PR中提到的那样,这确实会减缓插件的速度,但是如果这不是一个问题,它可能是一个解决方案。
https://stackoverflow.com/questions/70509854
复制相似问题