为什么 VS Code 不能直接运行 Python unittest .py 或在测试选项卡中发现

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

我在为一个较大的项目学习 Python 单元测试时遇到了这个问题,所以我将它复制到一个简单的样板项目中。我创建了一个像这样的文件夹结构,并在 VS Code 中从顶部目录中打开该项目。

unittestproject
├──examplepackage
├────__init__.py
├──test
├────__init__.py

我通过按 Ctrl+Shift+P 并使用命令面板中的 Python: Create Environment 来创建虚拟环境,为项目创建 .venv 虚拟环境。我认为这与这个问题无关,但我会提到它。

我在 /examplepackage 中创建了一个名为 add.py 的 py 文件,它只包含一个函数,该函数添加两个参数并返回结果。

我在 /test 中创建了一个名为 testadd.py 的 py 文件,其中包含以下内容...

import unittest
from examplepackage import add

class TestAdd(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add.add(1,2),3)
    
if __name__ == "__main__":
    unittest.main()

我可以通过以下方式从终端成功运行此测试,同时位于unittestproject目录中。

python -m unittest
python -m unittest test/testadd.py
python -m unittest test.testadd

这很好,但是如果我尝试使用右上角的播放按钮直接运行 testadd.py,我会收到 ModuleNotFoundError...

$ f:/Python/unittestproject/.venv/Scripts/python.exe
f:/Python/unittestproject/test/testadd.py
Traceback (most recent call last):
  File "f:\Python\unittestproject\test\testadd.py", line 2, in <module>
    from examplepackage import add
ModuleNotFoundError: No module named 'examplepackage'

此外,每当我尝试在“测试”选项卡中设置测试时,都会创建以下 settings.json 文件...

{
    "python.testing.unittestArgs": [
        "-v",
        "-s",
        "./test",
        "-p",
        "test*.py"
    ],
    "python.testing.pytestEnabled": false,
    "python.testing.unittestEnabled": true
}

我不断看到一个与 PyTest 令人困惑的错误,即使我指定要使用单元测试,而不是 PyTest。

[error] f:\Python\unittestproject\.venv\Scripts\python.exe: No module named pytest
[error] Subprocess exited unsuccessfully with exit code 1 and signal null on workspace f:\Python\unittestproject.
[error] Subprocess exited unsuccessfully with exit code 1 and signal null on workspace f:\Python\unittestproject. Creating and sending error discovery payload
[error] pytest test discovery error for workspace:  f:\Python\unittestproject

所以我的问题是:

  • 为什么通过unittest模块运行脚本可以很好地处理导入,但直接运行脚本时,Python无法看到相邻的包?
  • 尽管如此,为什么 VS Code 中的 Python IntelliSense 解析该包时没有遇到任何问题?
  • 为什么 VS Code 的“测试”选项卡坚持使用 PyTest,为什么它没有发现与正则表达式匹配的测试?

在过去的几个小时里,我试图自己解决这些问题,并通过其他论坛问题来解决这些问题,但其他人所说的应该有效的方法对我来说并不适用。一个例子,附加“项目”。到包前面的导入也无法解决。我还尝试将 __init__.py 添加到顶级目录。

编辑:我不知道为什么会这样,也许这是一个错误或其他什么。但我关闭了 VS Code 并稍后返回,测试选项卡中加载的测试没有问题。它使用unittest而不是PyTest并且运行它们工作得很好。这可能是一个错误。

python visual-studio-code python-unittest project-structure
1个回答
0
投票

您可能正在使用一些 venv,您需要找到它的路径并需要为其设置 python 解释器。它可能使用不同的解释器

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