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

2024-04-09

我无法将项目的单元测试集成到 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 很好地配合。


(这里是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 上的项目 https://github.com/jangroth/writing-aws-lambdas-in-python)

启动 VSCode 后运行此配置可以正确发现测试,而不会引发错误。不过,我还没有在不同的项目中尝试过。

另外,也许我没有找到 VSCode 文档的正确部分,但这感觉文档记录严重不足。我最终在 GitHub 上搜索了带有启动配置的要点,并将所有看似有帮助的内容复制在一起......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 VSCode 与 pytest 集成(“测试发现失败”)? 的相关文章

随机推荐