我使用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 模块。
您需要在
PYTHONPATH
文件中配置 .env
。
何时使用 PYTHONPATH 的一个例子是如果你有源代码 在 src 文件夹中,测试在测试文件夹中。运行测试时, 但是,这些测试通常无法访问 src 中的模块,除非您 硬编码相对路径。
要解决这个问题,您可以将 src 的路径添加到 PYTHONPATH 中: 在 VS Code 工作区中创建 .env 文件。
PYTHONPATH=src
因为
使用终端设置时,PYTHONPATH 会影响任何工具 由用户在终端内运行,以及任何操作 扩展为通过终端路由的用户执行,例如 作为调试。 但是,在这种情况下,当扩展正在执行时 不通过终端路由的操作,例如使用 a linter或者formatter,那么这个设置不会对产生影响 模块查找。
您可以参考官方文档了解更多详情。
也许对其他人有用。我深入研究了 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
环境变量没有帮助,正如已接受答案的评论之一中已经提到的那样。