【问题标题】:Python Unittest: No tests discovered in Visual Studio CodePython Unittest:在 Visual Studio Code 中未发现任何测试
【发布时间】:2018-07-05 19:47:53
【问题描述】:

我正在尝试使 Visual Studio Code 单元测试的自运行 feature 工作。 我最近对我的 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",但未成功。

【问题讨论】:

  • 你在说什么?你的 IDE 是什么?
  • 我正在尝试使 Visual Studio Code 单元测试的自运行 feature 工作。我正在使用 Visual Studio 代码
  • Visual Studio Code 对于测试发现的错误输出有点守口如瓶。要获得实际的错误消息,请在 CLI python -m unittest discover -v -s tests/ -p '*_test.py' 上手动运行它(适应您的目录和命名模式)。
  • 有趣的是,当我运行“python -m unittest discover -v -s tests/ -p '*_test.py'”时,我所有的测试都运行没有错误,但是 VScode 仍然没有发现它们...
  • python -m unittest discover -v -s tests/ -p '*_test.py' 感谢您提供此命令

标签: python visual-studio-code vscode-settings


【解决方案1】:

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

测试中有错误

如果测试脚本中有错误,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"
    ]
}

你会启动命令:

python3 -m unittest discover -v -s . -p "*test*.py"

您可以使用您发现测试的 args 单元,并相应地修改 .vscode/settings.json 中的 args。

Here are the docsunittest

注意

造成这种情况的一个常见原因是您正在尝试使用依赖项运行测试。如果是这种情况,您可以通过运行ctrl + shift + p 并搜索Python: Select Interpreter 来选择您的解释器,然后选择正确的解释器。

【讨论】:

    【解决方案2】:

    这是因为测试中的某些导入是不可发现的。运行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):
        ...
    
    

    【讨论】:

    • 谢谢!我已将我的 repo 配置为 python 包,然后我必须在每个子文件夹中都有__init__.py。不知怎的,我把它忘记在我的测试文件夹中了,所以我只是在测试文件夹的__init__.py 中导入了每个测试类,它就可以工作了!
    【解决方案3】:

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

    【讨论】:

    • 您可以接受自己的答案,以便问题有答案。
    • 当 Python 语法被破坏时,Visual Studio Code 无法发现测试
    • 单击测试状态指示器(VS Code 的左下角)以显示测试语法错误等
    • @Andrey Semakin 你拯救了我的一天
    • 我有一个类似的问题,我有一个 BaseTest 类,其中各种帮助方法位于 tests/__init__.py。如果在test_a.pytest_b.py 中,我继承了BaseTest(例如class TestFoo(BaseTest))并使用了相对导入from . import BaseTest,则不会发现任何测试。解决方案是使用绝对导入:from tests import BaseTest。 VS Code 然后发现了这些测试。谢谢,马修斯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多