首页 > 解决方案 > 返回方法的 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是,我必须在夹具和使用此夹具的每个测试中描述一次参数和返回类型。

那么有没有更有效的方法呢?

标签: pythonpython-3.xpycharmpytest

解决方案


预期的方式似乎是使用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 )


推荐阅读