正如标题所说。我正在使用pytest附带的caplog
夹具。我正在使用mypy进行类型检查,并且想知道caplog的正确类型提示是什么
例如:
def test_validate_regs(caplog: Any) -> None:
validate_regs(df, logger)
assert caplog.text == "", "No logs should have been made."
在本例中,我将其设置为Any
,但我想知道是否有更具体的类型提示可以使用
我试着阅读caplog上的文档,并在github中搜索pytest代码,以查看caplog fixture返回的内容,但除了the following之外,找不到其他内容。但是使用str
类型只是给了我一个错误,说str
类型没有属性text
,这是有道理的
当我打印caplog类型时,我得到了_pytest.logging.LogCaptureFixture
,尽管我不确定如何从_pytest
导入并使用它
此答案适用于尚未或无法更新到pytest 6+的用户。
如果您使用的是pytest 6+及以上版本,请参阅下面的updated answer
对于pytest<;6.x,您可以使用
_pytest.logging.LogCaptureFixture
类型提示不适用于MyPy:
类型提示也适用于Intellisense:
(上面的Intellisense弹出窗口与API doc for ^{} 匹配)
但是要注意,{}中的{}表明它不是一个“公共”API(如前面提到的{a4})。向装置添加类型始于此Github问题:Support for static typing:
这导致了Github问题:Typing and public API:
…而“其他一切”包括
LogCaptureFixture
类型提示(从该问题的待办事项列表中可以看出)。关于如何使其“官方化”有很多讨论:从pytest 6.2.0开始,您应该使用
pytest.LogCaptureFixture
在此之前,您需要导入一个不推荐使用的私有名称(我们经常在没有通知的情况下更改
_pytest
名称空间内的内部结构,并且不保证向前或向后兼容)免责声明:我是pytest核心开发人员
相关问题 更多 >
编程相关推荐