Pythonunittest发现无法导入源代码

Lit*_*chy 2 python python-unittest visual-studio-code

我使用 VSCode 中集成的 Python unittest 进行测试。我有这样的目录

project_root/
  src/
    module/
      __init__.py
      a.py
  test/
    module/
      __init__.py
      test_a.py
Run Code Online (Sandbox Code Playgroud)

test_a.py进口from module.a import SomeClass

我有参数

"-v",
"-s",
"./test",
"-p",
"test*.py"
Run Code Online (Sandbox Code Playgroud)

当运行测试发现时,它失败并引发ModuleNotFoundCan not import模块或类a.py

PS:我已经设置了PYTHONPATHsettings.json代码分析和程序启动都工作正常。但似乎对插件没有帮助unittest。一个问题是,两个src,test都有命名的模块module,我不确定这是否重要。

如何让它发挥作用?

更新:似乎这是一个名称冲突问题,unittest_discovery 无法处理此问题。在我更改 args 后,-s ./test/module它可以导入 src 模块。

Ste*_*SFT 6

您需要在文件PYTHONPATH中配置.env

何时使用 PYTHONPATH 的一个示例是,如果您的 src 文件夹中有源代码,而测试文件夹中有测试。但是,在运行测试时,除非您硬编码相对路径,否则这些测试通常无法访问 src 中的模块。

要解决此问题,您可以通过在 VS Code 工作区中创建 .env 文件将 src 的路径添加到 PYTHONPATH 。

PYTHONPATH=src

因为

使用终端设置时,PYTHONPATH 会影响用户在终端内运行的任何工具,以及扩展通过终端路由为用户执行的任何操作(例如调试)。但是,在这种情况下,当扩展执行 不通过终端路由的操作(例如使用 linter 或格式化程序)时,此设置不会对 模块查找产生影响。

您可以参考官方文档了解更多详细信息。