gpt4 book ai didi

python - 如何指定 mypy 类型的 pytest_configure fixture ?

转载 作者:行者123 更新时间:2023-12-03 16:47:07 32 4
gpt4 key购买 nike

我正在尝试为我在测试项目中使用的 pytest native 装置指定 mypy 类型提示,例如:

import pytest

def pytest_configure(config):
# Do something useful here
config fixture 返回 _pytest.config.Config目的。如果我尝试天真地对此建模:
import pytest

def pytest_configure(config: Config) -> None:
# Do something useful here
我收到一个 mypy 错误: conftest.py:3: error: Name 'Config' is not defined [name-defined]我可以做 from _pytest.config import Config ,但这似乎不是一个好方法,因为 _pytest 是私有(private)的。
另一种选择是忽略 # type: ignore 的类型。 .如果这是推荐的方式,我当然会这样做,但我想知道是否有更好的选择。
我使用的任何类型的 pytest native 装置都有同样的问题,例如 request用于参数化 fixture 。这将是 _pytest.fixtures.FixtureRequest .

最佳答案

进口 from _pytest.config由于pytest当前不导出 Config (从 6.2 开始),输入的唯一方法是使用 from _pytest.config import Config .这也是我输入 config 的方式, 可以看出例如在 this question of mine :

from _pytest.config import Config

def pytest_configure(config: Config) -> None:
...
您可以在此 pytest 中跟踪打字进度问题: #7469 .
自定义类型 stub
您还可以引入一个隐藏重新导出的小型自定义类型 stub 。在这里是否有用值得怀疑,只值得一提替代解决方案。如果创建文件 _typeshed/pytest.pyi内容如下:
from typing import Any
from _pytest.config import Config as Config

def __getattr__(name: str) -> Any: ... # incomplete
并使其可供 mypy 访问在 mypy.ini :
[mypy]
mypy_path = _typeshed
现在可以导入 from pytest import Config至少在类型检查模式下 - 运行时导入仍然会失败。所以进口看起来像
from typing import Any, TYPE_CHECKING

if TYPE_CHECKING:
from pytest import Config
else:
Config = Any


def pytest_configure(config: Config) -> None:
pass
该解决方案的唯一好处是现在隐藏了私有(private)导入;不过,我仍然会选择私有(private)进口。

关于python - 如何指定 mypy 类型的 pytest_configure fixture ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65491369/

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