截至目前(版本 6.2),pytest
不提供任何类型提示param
属性。如果您只需输入param
不管其余的FixtureRequest
字段和方法,您可以内联自己的 impl 存根:
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
,存根变得更加复杂:
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
, e.g.
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
的代码库 - 我猜它被省略是有原因的......