在VSCode中未发现Python单元测试

时间:2017-12-24 12:18:23

标签: python visual-studio-code python-unittest

我使用scraping_test.py编写了一个名为unittest的python测试文件,其中包含一个名为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中运行测试时,它表示没有发现任何测试:

No tests discovered, please check the configuration settings for the tests.

如何让它发挥作用?

7 个答案:

答案 0 :(得分:2)

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

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

然而有一件事让我感到困惑的是Python文件必须是一个有效的Python文件。 VS Code for Python中的intellisense并不复杂(与Javascript或Typescript相比),并且它不会突出显示任何语法错误。您可以通过强制它来验证它是否运行所有单元测试并观察Python Test Log窗口。

答案 1 :(得分:1)

让我着迷的是,必须在每个子目录中创建__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 :(得分:0)

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

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

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

答案 3 :(得分:0)

不是文件名“ scraping_test.py”,而是“ test_scraping.py” 字符串应以“ test”前缀开头

答案 4 :(得分:0)

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

除了上述内容外,在测试文件名中不要使用句点(例如,使用module_test.py代替module.test.py)也很重要。

>

答案 5 :(得分:0)

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

import os
import django

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

答案 6 :(得分:0)

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

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

之后,测试成功。