python - 返回方法的 pytest 固定装置的类型提示
问题描述
我的一些 pytest 设备返回一个方法。我想为我的所有方法使用类型提示。要说一个方法返回一个我可以Callable
在这里使用的方法。这里的问题:我失去了 IDE PyCharm 中参数的自动完成功能。
没有给出夹具返回值的类型提示:
@pytest.fixture
def create_project():
def create(location: Path, force: bool = True) -> bool:
# ...
return create
def test_project(create_project):
project_created = create_project()
使用给定的类型提示:
@pytest.fixture
def create_project() -> Callable[[Path, bool], bool]:
def create(location: Path, force: bool = True) -> bool:
# ...
return create
def test_project(create_project):
project_created = create_project()
另一个问题Callable
是,我必须在夹具和使用此夹具的每个测试中描述一次参数和返回类型。
那么有没有更有效的方法呢?
解决方案
预期的方式似乎是使用Protocol:
from typing import Protocol
class ProjectMaker(Protocol):
def __call__(self, location: Path, force: bool = True) -> bool: ...
@pytest.fixture
def create_project() -> ProjectMaker:
def create(location: Path, force: bool = True) -> bool:
...
return create
def test_project(create_project: ProjectMaker):
project_created = create_project()
不幸的是,PyCharm 目前不支持此功能 ( #PY-45438 )