Почему мой Django Unittest не загружается с помощью "ImportError: Не удалось импортировать тестовый модуль: тесты" - PullRequest
0 голосов
/ 09 декабря 2018

Я не могу понять, что я делаю неправильно.

Я добавил этот простой модульный тест:

from django.test import TestCase
from blog.myapp.models import *


class AllTests(TestCase):

    def FooBarTest(self):
        foo1 = Foo.objects.create(name='foo1')
        bar1 = Bar.objects.create(name='bar1')
        FooBar.objects.create(foo=foo1,bar=bar1)
        foo_from_db = Foo.objects.filter(bar__id=bar1)
        self.assertEqual(foo1.id,foo_from_db.id)

Вот мой макет проекта:

.
├── blog
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   └── 0001_initial.py
│   ├── models.py
│   ├── serializers.py
│   ├── templates
│   │   ├── myapp
│   │   │   ├── index.html
│   │   │   └── post_detail.html
│   │   └── post_list.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py

Я использую PyCharm, и вот как я настроил тест:

PyCharm Edit Configuration Dialog Box

Теперь, когда я запускаю свой тест, я получаю этот вывод:

Testing started at 6:21 PM ...
C:\Users\plankton\PycharmProjects\blog\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2\helpers\pycharm\_jb_unittest_runner.py" --target tests.AllTests
Launching unittests with arguments python -m unittest tests.AllTests in C:\Users\plankton\PycharmProjects\blog\blog\myapp

Error
Traceback (most recent call last):
  File "C:\Users\plankton\AppData\Local\Programs\Python\Python37-32\lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "C:\Users\plankton\AppData\Local\Programs\Python\Python37-32\lib\unittest\case.py", line 615, in run
    testMethod()
  File "C:\Users\plankton\AppData\Local\Programs\Python\Python37-32\lib\unittest\loader.py", line 34, in testFailure
    raise self._exception
ImportError: Failed to import test module: tests
Traceback (most recent call last):
  File "C:\Users\plankton\AppData\Local\Programs\Python\Python37-32\lib\unittest\loader.py", line 154, in loadTestsFromName
    module = __import__(module_name)
  File "C:\Users\plankton\PycharmProjects\blog\blog\myapp\tests.py", line 2, in <module>
    from blog.myapp.models import *
  File "C:\Users\plankton\PycharmProjects\blog\blog\myapp\models.py", line 4, in <module>
    class Author(models.Model):
  File "C:\Users\plankton\PycharmProjects\blog\venv\lib\site-packages\django\db\models\base.py", line 87, in __new__
    app_config = apps.get_containing_app_config(module)
  File "C:\Users\plankton\PycharmProjects\blog\venv\lib\site-packages\django\apps\registry.py", line 249, in get_containing_app_config
    self.check_apps_ready()
  File "C:\Users\plankton\PycharmProjects\blog\venv\lib\site-packages\django\apps\registry.py", line 131, in check_apps_ready
    settings.INSTALLED_APPS
  File "C:\Users\plankton\PycharmProjects\blog\venv\lib\site-packages\django\conf\__init__.py", line 57, in __getattr__
    self._setup(name)
  File "C:\Users\plankton\PycharmProjects\blog\venv\lib\site-packages\django\conf\__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\plankton\PycharmProjects\blog\venv\lib\site-packages\django\conf\__init__.py", line 107, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:\Users\plankton\AppData\Local\Programs\Python\Python37-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named 'blog.settings'




Ran 1 test in 0.002s

FAILED (errors=1)

Process finished with exit code 1

По предложению Клауса D я обновил свою конфигурацию запуска следующим образом ...

enter image description here

... и теперь это выглядит так ...

enter image description here

Но я получаю те же ошибки.

Я могу заставить тест работать с терминала:

(venv) C:\Users\plankton\PycharmProjects\blog\blog>python manage.py test myapp.tests.AllTests.FooBarTest
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Destroying test database for alias 'default'...

Но мне пришлось изменить мой оператор импорта в myapp / tests.py на:

from .models import *

1 Ответ

0 голосов
/ 09 декабря 2018

Проблема заключается в том, что бесплатная версия PyCharm не поддерживает модульные тесты Django.Тест, который я определил в PyCharm, это всего лишь тест на python, и PyCharm выполняет его:

python -m unittest blog.myapp.tests.AllTests 

Это не тот способ, которым запускается Django unittest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...