我最近在几个项目中成功使用了标准的 python unittest 框架,但是在最近几天它无法像以前一样工作。一个问题是,它现在似乎尝试使用 pytest 来代替全新项目中的测试发现,尽管我从未使用过 pytest。
重现步骤,请参阅文章在 Visual Studio Code 中测试 Python 了解文件内容的详细信息:
inc_dec.py
(请参阅上面链接的文章)tests
test_unittest.py
和空文件 __init__.py
(请参阅上面链接的文章)tests
文件夹test_*.py
对我来说,尽管设置清楚地显示 unittest 已启用而 pytest 未启用,但这会产生“Pytest 发现错误” Python 输出日志也表明了这一点,例如
2023-07-14 13:08:29.745 [info] Running discovery for unittest using the new test adapter.
2023-07-14 13:08:29.771 [info] > C:\Python\3.10.11\python.exe -m pytest -p vscode_pytest --collect-only
我期待测试被发现(并最终可调试)。
我尝试过的事情包括:
python -m unittest discover -v -s . -p "test_*.py"
- 运行测试,但 IDE 仍然没有发现它们__pycache__
文件夹tests
文件夹顺便说一句,现有项目仍然会发现测试,但在 VS Code 中,它们在调试测试时不再遇到断点,并且在运行测试时,它们现在抱怨子文件夹中引用的源文件(我已经看到了一些关于解决这个问题,我没见过对我有用的)。这可能与我现在记录的问题无关,但在此提及以防它影响提出的建议。对于上面的测试代码和现有项目,在 PyCharm 社区版中进行测试和测试调试工作,但不幸的是,该版本不支持运行和调试我们需要的 Jupyter Notebooks。调试其他 python 文件时会遇到断点。
这可能最终成为一个短期问题。根据 GitHub 问题 VS Code python unittest 无法导入测试文件夹之外的模块中的评论,有两种解决方法为我解决了这个问题。
A.将 VSCode 中的 Python 扩展版本从 v2023.12.0 恢复为 v2023.8.0。
B.将设置
"python.experiments.optOutFrom": ["pythonTestAdapter"]
插入用户设置(而不是工作区设置)。请注意尾随逗号。
我现在可以调试 python 单元测试测试。
更新
导致此问题的错误已在 Python 扩展 v2023.19 中修复。
我在使用 Python 扩展 v2024.2.1 时遇到了同样的问题。 编辑 settings.json 解决了问题:
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true
固定的settings.json:
{
"python.testing.unittestArgs": [
"-v",
"-s",
"./tests",
"-p",
"test_*.py"
],
"python.testing.unittestEnabled": true
}