如何将 VSCode 与 pytest 集成("测试发现失败")?



我无法将项目的单元测试集成到VSCode中。测试发现失败,因为pytest无法识别源文件。

(只是为了澄清,这是一个关于VSCode的问题,而不是pytest。我来这里是因为VSCode将其问题部分链接到SOF。如果我手动运行测试,测试可以正常工作。(

工装:pyenvpipenvpytest

项目布局:

/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在这里并不重要,根据这条评论,在使用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路径的一部分,因此测试无法导入源代码。

我可以在CLI/makefile级别上通过添加到PYTHONPATH:来修复此问题

PYTHONPATH=./src pytest

这是意料之中的事。

VSCode的正确设置是什么?

我应该创建一个用于测试的启动配置吗?我已经开始对此进行研究,但无法使其与pipenv很好地配合使用。

(此处为OP(

我认为集成到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上搜索了带有启动配置的注册表,并将任何看似有帮助的东西复制在一起。。。

最新更新