首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过中间夹具传递请求夹具

如何通过中间夹具传递请求夹具
EN

Stack Overflow用户
提问于 2021-03-24 18:48:18
回答 1查看 139关注 0票数 0

我(在火药中):

  • base夹具,它使用request.param
  • intermediary夹具,它使用使用intermediary夹具的base固定设备
  • 测试,并且我想要parameterize
  • intermediary

下面的代码示例将有助于解释:

代码语言:javascript
复制
import pytest

@pytest.fixture
def base(request) -> int:
    return request.param

@pytest.fixture
def intermediary(base: int) -> int:
    return base

# This does not work!  "In test_something: indirect fixture 'base' doesn't exist"
@pytest.mark.parametrize("intermediary", [1], indirect=["base"])
def test_something(intermediary: int) -> None:
    assert isinstance(intermediary, int)

我的问题:如何从只使用intermediary夹具的测试中填充base夹具的request

解决方案

包括测试签名工程中的基本夹具:

代码语言:javascript
复制
@pytest.mark.parametrize("base", [1], indirect=True)
def test_something_workaround(base: int, intermediary: int) -> None:
    assert isinstance(intermediary, int)

但是,这对我来说是不可取的,因为测试实际上并不使用base,而只使用intermediary

版本

代码语言:javascript
复制
Python==3.8
pytest==6.2.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 19:23:51

您几乎可以这样做,但您必须使用"base“作为parametrize中的夹具名称。

代码语言:javascript
复制
@pytest.fixture
def base(request) -> int:
    return request.param


@pytest.fixture
def intermediary(base: int) -> int:
    return base + 1


@pytest.mark.parametrize("base", [1], indirect=True)
def test_something(intermediary: int) -> None:
    assert intermediary == 2

例如,您将base参数化,但是使用派生的夹具,这比从base获得的结果要好。

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

https://stackoverflow.com/questions/66787455

复制
相关文章

相似问题

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