悬停不显示pytest信息,需确认右下角语言模式为Python(Pylance)、已执行“Python: Configure Tests”启用pytest、设置中pytestEnabled为true且unittestEnabled为false、文件保存为.py并位于工作区根目录;原生不支持pytest命令悬停,需借助Test Explorer等扩展或自定义插件实现。

测试用例悬停不显示 pytest 信息?先确认语言服务是否接管
VSCode 默认不会给 test_*.py 文件里的函数自动注入测试元数据(比如运行状态、命令行参数、覆盖率提示),除非对应语言扩展明确支持并注册了 HoverProvider。Python 官方扩展 + Pylance 默认只返回 JSDoc-style docstring 和类型信息,pytest 相关内容需额外条件触发:
- 确保右下角语言模式是
python,不是Plain Text或Python Test(后者不存在) - 已执行过
Python: Configure Tests并成功选中pytest—— 这步会激活测试发现逻辑,部分扩展借此注册 hover 行为 - 检查设置中
python.testing.pytestEnabled为true,且python.testing.unittestEnabled为false(避免冲突) - 文件必须保存(.py 后缀)、位于工作区根目录或被
python.defaultInterpreterPath覆盖的环境中
想在悬停里显示 pytest 命令或运行结果?得靠扩展或自定义 HoverProvider
原生 VSCode 和 Python 扩展不提供“悬停显示 pytest test_sample.py::test_add -v”这类功能。要实现,只有两条路:
- 装支持测试 hover 的第三方扩展,比如
Test Explorer UI配合Python Test Explorer,它们会在测试函数上悬停时显示“Run Test”“Debug Test”按钮(本质是渲染带command:协议的 MarkdownString) - 自己写插件:在
provideHover中匹配def test_开头的函数定义行,用正则提取函数名,拼出可执行命令,返回new vscode.MarkdownString(`\`pytest ${file}::${funcName}\``) - 注意:不能直接执行命令,只能展示;若想点击运行,需用
[Run](command:python.testing.runSelectedTest)这类已注册的 command URI
为什么改了 docstring 还不显示在悬停里?Pytest 不读它
你写再多 """Run with --tb=short and check coverage""",Pylance 也不会把它当 pytest 专用提示——它只认标准 docstring 结构(Args:, Returns:),且 pytest 本身不参与 hover 渲染链。真正影响悬停内容的是:
- 函数上方是否紧邻
"""开头的 docstring(中间不能有空行) - Pylance 是否启用(检查状态栏是否有闪电图标)
- 当前文件是否被识别为 Python(右下角语言 ID 必须是
python) - 没禁用
python.languageServer(设为Pylance而非None)
最省事的“伪自定义”:用 JSDoc 风格注释骗过 Pylance
虽然不原生支持 pytest,但你可以把测试函数当普通函数来注释,让悬停至少显示意图:
def test_add():
"""Verify `add()` handles positive and negative integers.
<pre class="brush:php;toolbar:false;">@pytest.mark.parametrize("a,b,expected", [
(2, 3, 5),
(-1, 1, 0),
])
"""
assert add(2, 3) == 5
assert add(-1, 1) == 0
这样悬停时能看到第一行描述和 parametrize 注释(Pylance 会原样渲染 docstring 内容)。但注意:@pytest 不是标准 JSDoc tag,别指望它被解析成交互元素——只是文本展示。
真要动态注入命令、状态或日志,必须走插件开发路径,且得处理缓存失效(比如测试文件修改后 hover 不刷新)和 languageId 匹配(python 不能写成 py)这两个最容易漏掉的点。











