Mat*_*iva 13 python visual-studio-code vscode-settings
我正在尝试使Visual Studio Code 单元测试的自运行功能起作用。我最近对我的 Python 项目的目录结构进行了更改,以前是这样的:
myproje\
domain\
__init__.py
repositories\
tests\
__init__.py
guardstest.py
utils\
__init__.py
guards.py
web\
Run Code Online (Sandbox Code Playgroud)
我的单元测试设置是这样的:
"python.unitTest.unittestArgs": [
"-v",
"-s",
"tests",
"-p",
"*test*.py"
]
Run Code Online (Sandbox Code Playgroud)
变更后的项目结构如下:
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\
Run Code Online (Sandbox Code Playgroud)
之后,扩展不再发现我的测试。我试图将 '-s' 参数更改为"./app/tests"
, ".tests"
, "./tests"
, "app/tests"
, "/app/tests"
, "app.tests"
, , , 未成功。
这可能不起作用的原因有两个:
如果测试脚本中有错误, pythonTesting
插件将找不到您的测试。
要检查潜在错误,请单击Show Test Output
,然后使用运行测试Run All Tests
(两个按钮都位于左上角,就在测试应出现的位置上方)。
如果有错误,它将显示在OUTPUT
选项卡中。
检查你的.vscode/settings.json
,并拿走python.testing.unittestArgs
清单。
您可以通过向命令行中的命令添加 args 来调试命令行中的测试发现python3 -m unittest discover
。
所以有了这个配置:
{
"python.testing.unittestArgs": [
"-v",
"-s",
".",
"-p",
"*test*.py"
]
}
Run Code Online (Sandbox Code Playgroud)
您将启动命令:
python3 -m unittest discover -v -s . -p "*test*.py"
Run Code Online (Sandbox Code Playgroud)
您可以使用您发现测试的 args 单元,并.vscode/settings.json
相应地修改 中的 args。
这是以下文档unittest
出现这种情况的一个常见原因是您尝试运行具有依赖项的测试。如果是这种情况,您可以通过运行ctrl
++并搜索来选择您的解释器,然后选择正确的解释器。shift
p
Python: Select Interpreter
问题是我在测试模块 ( from ..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)
Run Code Online (Sandbox Code Playgroud)
然后在测试文件中,不要扩展unittest.TestCase,而是执行
from test import TestBase
class Test_A(TestBase):
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17859 次 |
最近记录: |