Pythonunittest发现无法导入源代码

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

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

project_root/
  src/
    module/
      __init__.py
      a.py
  test/
    module/
      __init__.py
      test_a.py

test_a.py
有进口
from module.a import SomeClass

我有参数

"-v",
"-s",
"./test",
"-p",
"test*.py"

运行测试发现时失败并引发

ModuleNotFound
Can not import
中的模块或类
a.py

PS:我已经在

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

如何让它发挥作用?

更新:似乎是名称冲突问题,unittest_discovery 无法处理此问题。将 args 更改为

-s ./test/module
后,它可以导入 src 模块。

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

您需要在

PYTHONPATH
文件中配置
.env

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

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

PYTHONPATH=src

因为

使用终端设置时,PYTHONPATH 会影响任何工具 由用户在终端内运行,以及任何操作 扩展为通过终端路由的用户执行,例如 作为调试。 但是,在这种情况下,当扩展正在执行时 不通过终端路由的操作,例如使用 a linter或者formatter,那么这个设置不会对产生影响 模块查找。

您可以参考官方文档了解更多详情。


2
投票

也许对其他人有用。我深入研究了 python 扩展的源代码,发现还有一个额外的参数

--top-level-directory
/
-t
,在 VS Code 文档中没有提到。

因此,向

-t .
文件提供参数
settings.json
解决了我的案例中的问题。

{
    ...,
    "python.testing.unittestArgs": [
        "-v",
        "-t",
        ".",
        "-s",
        "./test",
        "-p",
        "test_*.py"
    ]
}

因此,扩展生成的命令将如下所示:

ms-python.python-2023.20.0/pythonFiles/unittestadapter/discovery.py --udiscovery -v -t . -s ./test -p test_*.py

使用

PYTHONPATH
环境变量没有帮助,正如已接受答案的评论之一中已经提到的那样。

© www.soinside.com 2019 - 2024. All rights reserved.