我无法将项目的单元测试集成到VSCode中。由于pytest无法识别源文件,所以测试发现失败。
(为了澄清起见,这是一个关于VSCode的问题,而不是关于pytest的问题。我在这里是因为VSCode将其问题部分链接到SOF。如果我手动运行它们,测试就能正常工作。)
工具:pyenv
,pipenv
,pytest
。
项目布局:
/src -> source code
/tests/unit -> test code
..vscode/setings.json:
{
"python.envFile": "${workspaceFolder}/.env",
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false
[...]
}
.env:
PYTHONPATH=./src
(注:我认为在使用PYTHONPATH变量时,.env在这注释中并不重要)
测试发现失败的原因如下:
tests/unit/test_revoke_default_sg.py:7: in <module>
from revokedefaultsg.app import RevokeDefaultSg, UnknownEventException
E ModuleNotFoundError: No module named 'revokedefaultsg'
=========================== short test summary info ============================
ERROR tests/unit/test_revoke_default_sg.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.08s ===============================
这是因为./src
不是python的一部分,所以测试不能导入源代码。
我可以通过添加到PYTHONPATH在CLI/makefile级别上修复这个问题:
PYTHONPATH=./src pytest
这如预期的那样起作用。
VSCode的正确设置是什么?
我应该为测试创建一个启动配置吗?我已经开始研究这个问题了,但是它不能很好地与pipenv一起工作。
发布于 2020-08-13 11:15:23
(执行部分)
我认为集成到VSCode中的关键是为pytest创建一个特定的启动配置(在此之前,我只有使用Python创建的默认启动配置)。
我现在有两个配置(.vscode/launch.json
):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Run Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"PYTHONPATH": "./src"
}
},
{
"name": "Python: pytest",
"type": "python",
"request": "launch",
"module": "pytest",
"cwd": "${workspaceRoot}",
"env": {
"PYTHONPATH": "./src"
},
"envFile": "${workspaceRoot}/.env",
"console": "integratedTerminal",
}
]
}
(GitHub项目)
启动VSCode后运行此配置将正确发现测试,而不会引发错误。但是,我还没有在不同的项目中尝试过。
另外,也许我没有找到VSCode文档的正确部分,但这感觉文档严重不足。最后,我在GitHub上搜索了一些专家,并收集了一些看似有用的东西.
https://stackoverflow.com/questions/63385586
复制相似问题