我无法将项目的单元测试集成到 VSCode 中。测试发现失败,因为 pytest 无法识别源文件。
(只是为了澄清,这是一个关于 VSCode 的问题,与 pytest 无关。我在这里是因为 VSCode 将其问题部分链接到 SOF。如果我手动运行测试,测试效果很好。)
工具:pyenv
, pipenv
, pytest
.
项目布局:
/src -> source code
/tests/unit -> test code
.vscode/settings.json:
{
"python.envFile": "${workspaceFolder}/.env",
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false
[...]
}
.env:
PYTHONPATH=./src
(注意:我认为 .env 在这里并不重要,根据this https://code.visualstudio.com/docs/python/environments#_use-of-the-pythonpath-variable评论,下PYTHONPATH 变量的使用)
测试发现失败并显示:
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 很好地配合。