VSCode 中未发现 Python 单元测试

问题描述 投票:0回答:11

我编写了一个名为

scraping_test.py
的 python 测试文件,其中包含一个测试类,使用
unittest
,名为
TestScrapingUtils

"""Tests for the scraping app"""
import unittest

from bs4 import BeautifulSoup as bs4

from mosque_scraper.management.commands import scraping_utils
from mosque_scraper.selectors import MOSQUE_INFO_ROWS_SELECTOR

class TestScrapingUtils(unittest.TestCase):
    """Test scraping_utils.py """
    def setup(self):
        """Setup McSetupface."""
        pass
    def test_get_keys_from_row(self):
        """ Test that we extract the correct keys from the supplied rows."""
        test_page_name = "test_page.html"
        with open(test_page_name) as test_page_file:
            test_mosque = bs4(test_page_file, 'html.parser')
            rows = test_mosque.select(MOSQUE_INFO_ROWS_SELECTOR)
            field_dict = scraping_utils.get_fields_from_rows(rows)
            self.assertDictEqual(field_dict, {})

我的单元测试设置是:

{
    "python.unitTest.unittestEnabled": true,
    "python.unitTest.unittestArgs": [
        "-v",
        "-s",
        ".",
        "-p",
        "*test.py"
    ]
}

看起来应该可以工作,但是当我单击在 VSCode 中运行测试时,它说没有发现测试:

未发现测试,请检查测试的配置设置。

如何让它发挥作用?

python visual-studio-code python-unittest
11个回答
18
投票

您必须使用快捷键shift+ctrl p运行一次,然后输入“Python run all unit test”。

只有成功执行至少一次或使用discover单元测试方法,它才会显示在编辑器中。

但是,我多次注意到的一件事是 Python 文件必须是有效的 Python 文件。 VS Code for Python 中的智能感知并不复杂(与 Javascript 或 Typescript 相比),并且不会突出显示任何语法错误。您可以通过强制它运行所有单元测试并观察 Python 测试日志窗口来验证这一点。


8
投票

令我困惑的是,必须在每个子目录中创建

__init__.py
文件,从使用
-s
选项指定的根文件夹(在示例中为当前目录
"."
)到测试模块所在的子目录。只有这样我才能成功发现测试。

在问题示例中,

project_dir/
project_dir/scraping_app/
都应包含
__init__.py
。假设
settings.json
位于
project_dir/.vscode
并且测试从
project_dir/
目录运行。

编辑: 或者,使用

"-s", "./scraping_app/"
作为根测试目录,这样您就不必将
__init__.py
放入
project_dir/


2
投票

您可以在测试包的

DJANGO_SETTINGS_MODULE
文件中添加
django.setup()
变量和
__init__.py

import os
import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_app.settings')
django.setup()

1
投票

文件名应为“test_scraping.py”,而不是“scraping_test.py” 字符串应从 'test' 前缀开始


1
投票

我遇到了同样的错误,但配置略有不同。 (我将其发布在这里是因为这是您搜索此错误时出现的问题。)

除了上面所说的之外,不要在测试文件名中使用句点(例如使用

module_test.py
而不是
module.test.py
)也很重要。


0
投票

就我而言,问题是我的测试正在导入一个使用

os.environ['ENV_NAME']
读取环境变量的模块。如果变量不存在,则会抛出错误。但 VS Code 不会记录任何内容(或者至少我找不到它)。

所以,原因是我的 .env 文件不在工作区根目录中。所以我必须将

"python.envFile": "${workspaceFolder}/path/to/.env"
添加到
settings.json
文件中。

之后测试发现成功。


0
投票

也有这个问题。 对我来说,问题是,确保没有错误,并注释掉依赖 pytest 的文件中的所有代码,仅用于初始加载。


0
投票

导致单元测试未被发现的另一个问题是使用包含对 conda 包本身的显式依赖项的 conda 环境时。当

enviroment.yml
包含以下行时会发生这种情况:

- conda

删除此行并从头开始创建环境使单元测试可发现。我为此在 Github 中创建了一个错误报告:https://github.com/microsoft/vscode-python/issues/19643

(这是我对此问题的第二个解决方案;我决定创建另一个答案,因为这与前一个完全不同。)


0
投票

这是我第一次在 vscode 中使用unittest。我发现文件名不能包含空格和点。并且不能以数字开头。

对于点,我想单元测试的扩展会考虑点后面的任何内容。

对于空格,我猜他们没有使用“”来包围文件名。


0
投票

我的解决方案是:测试的名称-功能 - 不仅仅是文件的名称! 函数需要以“test_”开头

配置

settings.json

    "python.testing.unittestArgs": [
        "-v",
        "-s",
        ".",
        "-p",
        "***_test**.py"
    ],
    "python.testing.pytestEnabled": false,
    "python.testing.unittestEnabled": true
  • 文件:
    something_test.py
    --> 这个 _test 很重要
    import unittest
    
    class something(unittest.TestCase):
        def test_case1(self):
            self.assertFalse(False)
    
    if __name__ == '__main__':
        unittest.main()

test_case1(self)

test_
很重要


-1
投票

对我来说,发现单元测试成功了。

SHIFT+CTRL+P并执行“Python:发现单元测试”

运行此命令后,我在每个测试函数上获得“运行测试|调试测试”。

© www.soinside.com 2019 - 2024. All rights reserved.