配置为单元测试时,Visual Studio Code 会触发 pytest 的使用

问题描述 投票:0回答:2

我最近在几个项目中成功使用了标准的 python unittest 框架,但是在最近几天它无法像以前一样工作。一个问题是,它现在似乎尝试使用 pytest 来代替全新项目中的测试发现,尽管我从未使用过 pytest

  • 尝试过的 VS Code 版本:1.80.0、1.79.2 和 1.79.1(每种情况下的用户设置)
  • Python 扩展:v2023.12.0
  • 尝试过的Python版本:3.9.13、3.10.6、3.10.11
  • Windows 10 版本 22H2(操作系统内部版本 19045.3086)

重现步骤,请参阅文章在 Visual Studio Code 中测试 Python 了解文件内容的详细信息:

  1. 创建新文件夹
  2. 在 VS Code 中打开文件夹
  3. 在 VS Code 中,创建文件
    inc_dec.py
    (请参阅上面链接的文章)
  4. 确保使用 python 3.9+ 的普通安装作为环境(请参阅上面的列表以了解我尝试过的内容)
  5. 添加文件夹
    tests
  6. 在其中创建文件
    test_unittest.py
    和空文件
    __init__.py
    (请参阅上面链接的文章)
  7. 使用以下选项配置 Python 测试(请参阅上面链接的文章):
    1. 标准 python unittest 框架
    2. tests
      文件夹
    3. 图案
      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

我期待测试被发现(并最终可调试)。

我尝试过的事情包括:

  • 停止并重新启动 VS Code
  • 重启
  • 恢复到 VS Code 的早期版本(如上所列)
  • Python 的不同基本版本(如上所列)
  • 之前在其他项目中工作过的虚拟环境
  • PyCharm - 在那里工作正常,但由于 Jupyter Notebook 要求而无法使用
  • running
    python -m unittest discover -v -s . -p "test_*.py"
    - 运行测试,但 IDE 仍然没有发现它们
  • 删除
    __pycache__
    文件夹
  • 省去
    tests
    文件夹

顺便说一句,现有项目仍然会发现测试,但在 VS Code 中,它们在调试测试时不再遇到断点,并且在运行测试时,它们现在抱怨子文件夹中引用的源文件(我已经看到了一些关于解决这个问题,我没见过对我有用的)。这可能与我现在记录的问题无关,但在此提及以防它影响提出的建议。对于上面的测试代码和现有项目,在 PyCharm 社区版中进行测试和测试调试工作,但不幸的是,该版本不支持运行和调试我们需要的 Jupyter Notebooks。调试其他 python 文件时会遇到断点。

visual-studio-code python-unittest
2个回答
7
投票

这可能最终成为一个短期问题。根据 GitHub 问题 VS Code python unittest 无法导入测试文件夹之外的模块中的评论,有两种解决方法为我解决了这个问题。

A.将 VSCode 中的 Python 扩展版本从 v2023.12.0 恢复为 v2023.8.0。

B.将设置

"python.experiments.optOutFrom": ["pythonTestAdapter"]
插入用户设置(而不是工作区设置)。请注意尾随逗号。

我现在可以调试 python 单元测试测试。

更新

导致此问题的错误已在 Python 扩展 v2023.19 中修复。


0
投票

我在使用 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
}
© www.soinside.com 2019 - 2024. All rights reserved.