我(在火药中):
base夹具,它使用request.paramintermediary夹具,它使用使用intermediary夹具的base固定设备parameterize intermediary。
下面的代码示例将有助于解释:
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?
解决方案
包括测试签名工程中的基本夹具:
@pytest.mark.parametrize("base", [1], indirect=True)
def test_something_workaround(base: int, intermediary: int) -> None:
assert isinstance(intermediary, int)但是,这对我来说是不可取的,因为测试实际上并不使用base,而只使用intermediary。
版本
Python==3.8
pytest==6.2.2发布于 2021-03-24 19:23:51
您几乎可以这样做,但您必须使用"base“作为parametrize中的夹具名称。
@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获得的结果要好。
https://stackoverflow.com/questions/66787455
复制相似问题