[英]Python Unittest: No tests discovered in Visual Studio Code
我正在尝试使 Visual Studio Code 单元测试的自运行功能正常工作。 我最近对我的 Python 项目的目录结构进行了更改,之前是这样的:
myproje\
domain\
__init__.py
repositories\
tests\
__init__.py
guardstest.py
utils\
__init__.py
guards.py
web\
我的 unittest 设置是这样的:
"python.unitTest.unittestArgs": [
"-v",
"-s",
"tests",
"-p",
"*test*.py"
]
修改后的项目结构如下:
myprojet\
app\
controllers\
__init__.py
models\
__init__.py
entities.py
enums.py
tests\
res\
image1.png
image2.png
__init__.py
guardstest.py
utils\
__init__.py
guards.py
views\
static\
templnates\
__init__.py
uml\
之后,扩展不再发现我的测试。 我尝试将 '-s' 参数更改为"./app/tests"
、 ".tests"
、 "./tests"
、 "app/tests"
、 "/app/tests"
、 "app.tests"
, 不成功 。
问题是我在测试模块中使用了相对导入( from ..utils import guards
)。 我只是将其更改为绝对导入( from app.utils import guards
),然后一切又from app.utils import guards
了。
这是因为测试中的某些导入是不可发现的。 运行python -m unittest -h
,输出的最后一行是
对于测试发现,所有测试模块必须可以从项目的顶级目录导入。
很可能 VSCode 在没有正确的 PYTHONPATH 和其他环境变量的情况下运行命令。
我创建了__init__.py
并将以下代码放入其中。
import sys
import os
import unittest
# set module path for testing
sys.path.insert(0, "path_in_PYTHONPATH")
# repead to include all paths
class TestBase(unittest.TestCase):
def __init__(self, methodName: str) -> None:
super().__init__(methodName=methodName)
然后在测试文件中,而不是扩展 unittest.TestCase,做
from test import TestBase
class Test_A(TestBase):
...
我正在尝试使Visual Studio Code单元测试的自运行功能起作用。 最近,我对Python项目的目录结构进行了更改,以前是这样的:
myproje\
domain\
__init__.py
repositories\
tests\
__init__.py
guardstest.py
utils\
__init__.py
guards.py
web\
我的单元测试设置是这样的:
"python.unitTest.unittestArgs": [
"-v",
"-s",
"tests",
"-p",
"*test*.py"
]
更改后,项目的结构如下:
myprojet\
app\
controllers\
__init__.py
models\
__init__.py
entities.py
enums.py
tests\
res\
image1.png
image2.png
__init__.py
guardstest.py
utils\
__init__.py
guards.py
views\
static\
templnates\
__init__.py
uml\
之后,该扩展程序不再发现我的测试。 我试图将'-s'参数更改为"./app/tests"
, ".tests"
, "./tests"
, "app/tests"
, "/app/tests"
, "app.tests"
, 不成功 。
这可能不起作用有两个原因:
如果测试脚本中有错误,python Testing
插件将找不到您的测试。
要检查潜在错误,请单击Show Test Output
,然后使用Run All Tests
(两个按钮都位于左上角,就在测试应出现的位置上方)。
如果有错误,它将出现在OUTPUT
选项卡中。
检查您的.vscode/settings.json
,并获取python.testing.unittestArgs
列表。
您可以通过将 args 添加到命令行中的python3 -m unittest discover
命令来调试命令行中的测试python3 -m unittest discover
。
所以有了这个配置:
{
"python.testing.unittestArgs": [
"-v",
"-s",
".",
"-p",
"*test*.py"
]
}
您将启动以下命令:
python3 -m unittest discover -v -s . -p "*test*.py"
您可以使用您发现测试的 args unitl,并相应地修改.vscode/settings.json
的 args。
下面是文档的unittest
一个常见的原因是您试图运行具有依赖项的测试。 如果是这种情况,您可以通过运行ctrl
+ shift
+ p
并搜索Python: Select Interpreter
,然后选择正确的解释器来选择您的解释器。
只是想感谢这个线程上的每个人提供有用的建议。 在 Tests 目录中创建init .py 文件解决了这个问题! :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.