如何与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

(注意:根据this注释,在使用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完美配合。

解决方法

(在此处操作)

我认为集成到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","module": "pytest","cwd": "${workspaceRoot}","env": {
                "PYTHONPATH": "./src"
            },"envFile": "${workspaceRoot}/.env",}
    ]
}

project on GitHub

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

此外,也许我没有找到VSCode文档的正确部分,但是感觉文档不足。我最终在GitHub上搜索了具有启动配置的要点,并复制了所有看起来模糊有用的内容...