【问题标题】:Python unit tests not discovered in VSCodeVSCode 中未发现 Python 单元测试
【发布时间】:2018-06-06 05:31:05
【问题描述】:

我编写了一个名为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


    【解决方案1】:

    就我而言,问题在于我的测试正在导入一个模块,该模块正在使用os.environ['ENV_NAME'] 读取环境变量。如果变量不存在,则会引发错误。但是 VS Code 没有记录任何东西(或者至少我找不到)。

    所以,原因是我的 .env 文件不在工作区根目录中。所以我不得不将"python.envFile": "${workspaceFolder}/path/to/.env" 添加到settings.json 文件中。

    之后,测试发现成功。

    【讨论】:

      【解决方案2】:

      您可以在测试包的__init__.py 文件中添加DJANGO_SETTINGS_MODULE 变量和django.setup()

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

      【讨论】:

        【解决方案3】:

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

        除了上面所说的之外,在测试文件名中不要使用句点也很重要(例如,使用module_test.py 而不是module.test.py)。

        【讨论】:

          【解决方案4】:

          让我印象深刻的是必须在每个子目录中创建__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/

          【讨论】:

            【解决方案5】:

            而不是文件名 'scraping_test.py' 它应该是 'test_scraping.py' 字符串应从'test'前缀开始

            【讨论】:

            • 文件名很好,因为在设置中正确指定了格式:"-p", "*test.py"。这会捕获所有以test.py 结尾的文件(在问题示例中,scraping_test.py
            【解决方案6】:

            对我来说,发现单元测试可以解决问题。

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

            运行此程序后,我会在每个测试功能上获得“运行测试|调试测试”。

            【讨论】:

              【解决方案7】:

              您必须使用快捷键 shift+ctrl p 运行一次,然后键入“Python 运行所有单元测试”。

              在至少成功执行一次或使用发现单元测试方法之前,它不会显示在编辑器中。

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

              【讨论】:

                猜你喜欢
                • 2018-08-04
                • 1970-01-01
                • 2021-03-14
                • 2011-12-05
                • 1970-01-01
                • 2011-03-18
                • 1970-01-01
                • 2017-10-27
                • 2020-09-05
                相关资源
                最近更新 更多