如何在VSCode中启动django unittest?

时间:2019-10-17 03:46:50

标签: python django python-3.x visual-studio-code django-unittest

我正在尝试使用VSCode而不是终端运行django unittest。

我的项目树如下:

├── db.sqlite3
├── hero
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   ├── admin.cpython-37.pyc
│   │   ├── apps.cpython-37.pyc
│   │   ├── models.cpython-37.pyc
│   │   ├── tests.cpython-37.pyc
│   │   ├── urls.cpython-37.pyc
│   │   └── views.cpython-37.pyc
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── 0002_hero_age.py
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       ├── 0001_initial.cpython-37.pyc
│   │       ├── 0002_hero_age.cpython-37.pyc
│   │       └── __init__.cpython-37.pyc
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
└── toh
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-37.pyc
    │   ├── settings.cpython-37.pyc
    │   ├── urls.cpython-37.pyc
    │   └── wsgi.cpython-37.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

我在英雄目录中创建了tests.py文件。

我的tests.py代码如下:

from django.test import TestCase, Client
from .models import Hero
# Create your tests here.
class HeroTestCase(TestCase):
    def setUp(self):
        Hero.objects.create(name='Superman', age=10)
        Hero.objects.create(name='Batman', age=1)
        Hero.objects.create(name='Ironman', age=30)

    def test_hero_count(self):
        self.assertEqual(Hero.objects.all().count(), 3)
    def test_hero_id(self):
        client=Client()
        response=client.get('/hero/1/')

        self.assertEqual(response.status_code, 200)
        self.assertIn('1', response.content.decode())
    def test_hero_visit_count(self):
        client = Client()
        response = client.get('/hero/hello')
        self.assertEqual(response.status_code, 200)
        self.assertIn('1', response.content.decode())
        response = client.get('/hero/hello')
        self.assertEqual(response.status_code, 200)
        self.assertIn('2', response.content.decode())

我的.vscode / settings.json看起来像这样:

{
    "python.pythonPath": "/anaconda3/bin/python",
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    "python.testing.unittestArgs": [
        "-v",
        "-s",
        "./hero",
        "-p",
        "*test*.py"
    ],
    "python.testing.pytestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.unittestEnabled": true
}

但是当我通过VSCode进行测试时,此错误不断出现。

======================================================================
ERROR: tests (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests
Traceback (most recent call last):
  File "/anaconda3/lib/python3.7/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/anaconda3/lib/python3.7/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "toh/hero/tests.py", line 2, in <module>
    from .models import Hero
ImportError: attempted relative import with no known parent package

或者:

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

所以我检查了我的测试代码是否有问题,但是当我运行python manage.py test时,我的测试代码通过了!我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

相对的导入问题是因为您将-p设置为hero会将顶级目录更改为该目录,因此它看起来不再像是Python的软件包。

配置问题是因为unittest未运行manage.py。您可以转到https://github.com/microsoft/vscode-python/issues/73并?对该问题进行投票以对其进行优先级排序。