在 vscode 中调试 Python unittest 的行为与正常测试执行不同

Debugging Python unittest in vscode behaves differently than normal test execution

提问人:RSevier 提问时间:11/3/2023 更新时间:11/3/2023 访问量:51

问:

操作系统是 Windows 10 Python:3.10(在 3.11 和 3.9 中的行为相同) 这在 10 天前以前工作正常,所以我怀疑软件更新是罪魁祸首。

我正在尝试使用测试运行程序在 vscode 中调试一个简单的 python 单元测试。它失败并显示 ModuleNotFound 错误,但仅在调试模式下运行测试时才会失败。打印 sys.path 时,通过 debug 选项运行根工作区目录时缺少该目录。

另一个奇怪的是,在运行单个单元测试时,我发现调试器正在进入其他测试文件,并且在这些文件中失败。我必须将它们从我的测试目录中移出。

最小文件树

proj.
├───lib
│       main.py
│
└───test
        test_main.py

test_main contains:

from lib.main import m

我尝试过的事情:

  • 将我的整个 vscode 配置克隆到 MacOS,它按预期工作。检查 sys.path 时,根目录是调试器的一部分
  • 将 VSCode 回滚了几个月的版本。
  • 将 Pylance 和 Python 扩展也回溯了几个月的版本。
  • 将工作区路径添加到 sys.path 列表,但这会导致我的 azure cli 进一步出现错误,这些错误在常规执行中运行时不会发生。
  • settings.json python.testing.cwd 不与 sys.path 或任何其他有用的配置一致(也通过移动所有配置文件在 macOS 操作中排除)
  • 禁用了除 Python 和 Pylance 之外的所有 VSCode 扩展

这里的任何帮助将不胜感激!一周前运行良好!

python visual-studio-code 调试 python-unittest

评论


答:

0赞 MingJie-MSFT 11/3/2023 #1

可以使用 打开命令面板,键入“Python:配置测试”,然后选择显示的选项。Ctrl+Shift+P

enter image description here

enter image description here

请确保项目的根目录包含在测试发现路径中。

如果仍然不起作用,则可以将项目的根目录添加到环境变量中。这可以在工作区目录中的文件中完成。PYTHONPATH.env

另一个奇怪的是,在运行单个单元测试时,我发现 调试器正在进入其他测试文件,但这些文件失败。我有 将它们移出我的测试目录。

默认情况下,VS Code 的 Python 扩展将发现工作区中的所有测试文件。为此,您可以设置所需的测试文件的名称,并在上述设置之后进行相应的设置。例如,您可以只将文件设置为以 test 结尾,然后在设置中选择 *test.py。

enter image description here

评论

0赞 RSevier 11/3/2023
使用 .env 文件看起来就像这里的解决方案一样!我创建了一个包含 PYTHONPATH='.' 内容的 .env,VSCode 处理其余的工作。 谢谢!