Python Unittest:未在 Visual Studio Code 中发现测试

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", , , 未成功。

在此处输入图片说明

Use*_*716 9

这可能不起作用的原因有两个:

测试中有错误

如果测试脚本中有错误, 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++并搜索来选择您的解释器,然后选择正确的解释器。shiftpPython: Select Interpreter


Mat*_*iva 7

问题是我在测试模块 ( from ..utils import guards) 中使用了相对导入。我只是将其更改为绝对导入 ( from app.utils import guards),然后一切又正常了。

  • 当 Python 语法被破坏时,Visual Studio Code 无法发现测试 (5认同)

flo*_*t32 6

这是因为有些导入在测试中是无法发现的。运行时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)