You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode集成测试与mypy配置冲突问题求助

VSCode集成测试视图与pytest-mypy兼容问题

集成测试出现异常

我们偏好VSCode集成测试工具,同时也青睐mypy,但二者无法兼容。当我们在pytest.ini中添加mypy参数,配置如下:

[pytest]
pythonpath=./src
addopts = -vvv --cov --cov-report=term-missing --cov-fail-under=100 --ignore=.vscode --mypy 
filterwarnings =
    ignore:.*pkg_resources.*:DeprecationWarning

集成测试视图会丢失——移除--mypy参数后一切正常,但添加该参数后,仅能看到一个setup.py测试(如图所示)。

在扩展主机输出中,我们发现了“Illegal argument: line must be non-negative”错误:

2023-12-21 17:15:52.561 [error] Error: Illegal argument: line must be non-negative
    at m (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js:10:1101)
    at new f (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js:137:4467)
    at forEach (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/utils.ts:159:50)
    at Array.forEach (<anonymous>)
    at populateTestTree (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/utils.ts:154:27)
    at forEach (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/utils.ts:176:17)
    at Array.forEach (<anonymous>)
    at populateTestTree (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/utils.ts:154:27)
    at forEach (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/utils.ts:176:17)
    at Array.forEach (<anonymous>)
    at populateTestTree (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/utils.ts:154:27)
    at t.PythonResultResolver._resolveDiscovery (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/resultResolver.ts:60:25)
    at t.PythonResultResolver.resolveDiscovery (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/resultResolver.ts:35:21)
    at f.value (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/pytest/pytestDiscoveryAdapter.ts:22:80)
    at n.y (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js:80:1902)
    at n.fire (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js:80:2119)
    at t.PythonTestServer._fireDataReceived (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/server.ts:83:43)
    at t.PythonTestServer._resolveData (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/server.ts:65:22)
    at Socket.<anonymous> (/Users/samjoseph/.vscode/extensions/ms-python.python-2023.22.1/src/client/testing/testController/common/server.ts:28:54)
    at Socket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:324:12)
    at readableAddChunk (node:internal/streams/readable:297:9)
    at Socket.Readable.push (node:internal/streams/readable:234:10)
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)

解决思路:

  • 拆分mypy检查与测试发现流程:不要在pytest.ini的addopts中全局添加--mypy,而是单独运行mypy检查。比如在VSCode中配置自定义任务(.vscode/tasks.json)执行mypy:

    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "mypy: 类型检查",
                "type": "shell",
                "command": "${config:python.pythonPath} -m mypy ./src",
                "problemMatcher": ["$mypy"],
                "group": "build"
            }
        ]
    }
    

    需要时手动运行该任务,或设置为保存时自动触发。

  • 限制pytest-mypy的检查范围:在pytest.ini中添加mypy专属配置,排除setup.py或不需要检查的文件,避免生成无效测试项干扰VSCode测试视图:

    [pytest]
    pythonpath=./src
    addopts = -vvv --cov --cov-report=term-missing --cov-fail-under=100 --ignore=.vscode
    filterwarnings =
        ignore:.*pkg_resources.*:DeprecationWarning
    
    [mypy]
    pythonpath = ./src
    exclude = setup.py
    

    这样即使保留--mypy参数,pytest-mypy也不会处理setup.py,也就不会生成导致VSCode解析出错的测试项。

  • 更新相关组件版本:把VSCode的Python扩展(ms-python.python)和pytest-mypy插件更新到最新版,这类兼容性问题通常会在后续版本中被修复:

    • 在VSCode扩展面板找到Python扩展点击更新
    • 终端执行pip install --upgrade pytest-mypy更新插件
  • 临时规避方案:如果必须在测试命令中保留--mypy,可以在VSCode设置中禁用测试视图的自动发现,改用终端手动运行pytest命令,或调整测试发现参数跳过mypy相关测试项。

内容的提问来源于stack exchange,提问作者Sam Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:54:58