VS Code配置Python unittest单元测试报ModuleNotFoundError错误
问题根因
- 报错本质是Python模块搜索路径
sys.path未包含被测模块所在目录:VS Code执行unittest测试发现逻辑时,默认不会自动追加测试文件所在的子目录到模块搜索路径;PyCharm会自动识别项目源根并追加对应路径,因此同代码在PyCharm可正常运行,VS Code下触发ModuleNotFoundError: No module named 'run_command'。
解决方法
方案1:修改工作区配置(无代码侵入,推荐)
- 打开工作区下的
.vscode/settings.json,调整unittest启动参数,同时配置环境文件路径:
{ "python.testing.unittestArgs": [ "-v", "-s", "./shared-scripts", "-p", "*test*.py", "-t", "./shared-scripts" ], "python.testing.pytestEnabled": false, "python.testing.unittestEnabled": true, "python.envFile": "${workspaceFolder}/.env" }
- 在项目根目录新建
.env文件,将源码目录加入PYTHONPATH:
PYTHONPATH=${workspaceFolder}/shared-scripts:${PYTHONPATH}
- 打开VS Code命令面板,执行Python: 刷新测试,等待测试资源管理器重新加载用例即可。
方案2:调整测试文件导入逻辑(兼容多环境)
如果不想修改全局配置,可在测试文件run_command_test.py的导入语句前,手动将当前文件所在目录加入搜索路径:
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) import run_command
- 该写法不依赖IDE的路径配置,在任意环境下执行测试都可正常找到同目录模块。
方案3:修改unittest搜索根目录(单目录场景适用)
如果所有被测模块和测试文件都存放在shared-scripts/utils目录下,无跨目录导入需求,可直接将unittest的搜索起始目录改为该目录,修改settings.json:
{ "python.testing.unittestArgs": [ "-v", "-s", "./shared-scripts/utils", "-p", "*test*.py" ], "python.testing.pytestEnabled": false, "python.testing.unittestEnabled": true }
注意:该方案仅适配单目录测试场景,后续如果出现跨目录导入模块的需求,仍会触发同类导入报错。
内容的提问来源于stack exchange,提问作者Ashish Narmen
相关产品推荐
相关产品推荐

