在编写特定于项目的pytest插件时,我经常发现该Config对象对于附加我自己的属性很有用。例子:
from _pytest.config import Config
def pytest_configure(config: Config) -> None:
config.fizz = "buzz"
def pytest_unconfigure(config: Config) -> None:
print(config.fizz)
Run Code Online (Sandbox Code Playgroud)
显然,类中没有fizz属性_pytest.config.Config,所以运行mypy上面的代码片段会产生
conftest.py:5: error: "Config" has no attribute "fizz"
conftest.py:8: error: "Config" has no attribute "fizz"
Run Code Online (Sandbox Code Playgroud)
(请注意,pytest目前还没有带有类型提示的版本,因此如果您想在本地实际重现错误,请按照此评论中的步骤安装一个 fork )。
有时重新定义用于类型检查的类可以提供快速帮助:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from _pytest.config import Config as _Config
class Config(_Config):
fizz: str
else:
from _pytest.config import Config
def pytest_configure(config: Config) -> None:
config.fizz = …Run Code Online (Sandbox Code Playgroud) 在间接参数化示例中,我想输入指示request.param特定类型的提示,str例如 a。
问题是,由于参数必须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
Run Code Online (Sandbox Code Playgroud)