gpt4 book ai didi

python - 如何在间接参数化中对 request.param 进行注释?

转载 作者:行者123 更新时间:2023-12-04 16:45:05 25 4
gpt4 key购买 nike

Indirect parametrization example我想输入提示 request.param指示特定类型,str例如。
问题在于 fixt 的论点必须是 request 固定装置似乎无法指示通过“可选 param 属性”传递的参数应该是什么类型(引用文档)。
有哪些替代方案?也许在 fixt 中记录了类型提示文档字符串,或在 test_indirect文档字符串?

@pytest.fixture
def fixt(request):
return request.param * 3

@pytest.mark.parametrize("fixt", ["a", "b"], indirect=True)
def test_indirect(fixt):
assert len(fixt) == 3

最佳答案

截至目前(6.2 版),pytest不为 param 提供任何类型提示属性。如果您只需要输入 param不考虑 FixtureRequest 的其余部分字段和方法,您可以内联您自己的 impl stub :

from typing import TYPE_CHECKING


if TYPE_CHECKING:
class FixtureRequest:
param: str
else:
from typing import Any
FixtureRequest = Any


@pytest.fixture
def fixt(request: FixtureRequest) -> str:
return request.param * 3
如果您想扩展 FixtureRequest 的现有类型, stub 变得有些复杂:
from typing import TYPE_CHECKING


if TYPE_CHECKING:
from pytest import FixtureRequest as __FixtureRequest
class FixtureRequest(__FixtureRequest):
param: str
else:
from pytest import FixtureRequest


@pytest.fixture
def fixt(request: FixtureRequest) -> str:
return request.param * 3
理想情况下, pytest将允许通用 param输入 FixtureRequest ,例如
P = TypeVar("P")  # generic param type

class FixtureRequest(Generic[P]):
def __init__(self, param: P, ...):
...
然后你会做
from pytest import FixtureRequest

@pytest.fixture
def fixt(request: FixtureRequest[str]) -> str:
return request.param * 3
但是,不确定这种类型是否与当前的 pytest 一致。的代码库 - 我想它被省略是有原因的......

关于python - 如何在间接参数化中对 request.param 进行注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65334215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com