我在为一个较大的项目学习 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
所以我的问题是:
在过去的几个小时里,我试图自己解决这些问题,并通过其他论坛问题来解决这些问题,但其他人所说的应该有效的方法对我来说并不适用。一个例子,附加“项目”。到包前面的导入也无法解决。我还尝试将 __init__.py 添加到顶级目录。
编辑:我不知道为什么会这样,也许这是一个错误或其他什么。但我关闭了 VS Code 并稍后返回,测试选项卡中加载的测试没有问题。它使用unittest而不是PyTest并且运行它们工作得很好。这可能是一个错误。
您可能正在使用一些 venv,您需要找到它的路径并需要为其设置 python 解释器。它可能使用不同的解释器