首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可参数化夹具的参数参数

可参数化夹具的参数参数
EN

Stack Overflow用户
提问于 2021-12-28 16:32:07
回答 1查看 54关注 0票数 0

我有一个工作良好的可参数化的夹具。下面的函数是一个具有相同行为的虚拟函数。

代码语言:javascript
复制
@pytest.fixture(scope="function")
def parametrizable_fixture(parameters):
    return parameters

这在大多数测试中运行良好,如下所示:

代码语言:javascript
复制
@pytest.mark.parametrize("parameters", [["param 1", "param 2"]])
def test_dummy(parametrizable_fixture):
    assert parametrizable_fixture == ["param 1", "param 2"]

但是,如果我想将另一个夹具(如下面所定义的)作为第一个夹具的参数,则测试失败:

代码语言:javascript
复制
@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"]

惰性夹具没有被它应该具有的值所取代,即我得到了以下错误消息:

代码语言:javascript
复制
E      assert ['param 1', <LazyFixture "param2fixture">] == ["param 1", "param 2"]

编辑:这些例子使用夹具作为参数,长度在两个列表中。这只是为了简化问题。对于这些作为参数的惰性夹具的数量或位置没有任何限制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-28 18:52:02

您正在尝试将参数(parameters)的一部分替换为惰性夹具,但这只适用于整个参数。

修复示例的最简单方法是使用2个参数:

代码语言:javascript
复制
@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中提到的那样,这确实会减缓插件的速度,但是如果这不是一个问题,它可能是一个解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70509854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档