繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM