Django: как динамически создавать модель только для тестирования

Ответ @ paluh требует добавления django-fields нежелательного кода в файл, не django-models являющийся тестовым, и, по py моему опыту, решение @ carl unit-test не работает с django.test.TestCase, который необходим mock для использования фикстур. Если python-shell вы хотите использовать django.test.TestCase, вам py необходимо убедиться, что python-shell вы вызываете syncdb до загрузки py фикстур. Для этого требуется mock переопределить метод _pre_setup (помещения django-fields кода в метод setUp недостаточно). Я unit-tests использую свою версию TestCase, которая unit-test позволяет мне добавлять приложения pythonic с тестовыми моделями. Он django-imagefield определяется следующим образом:

from django.conf import settings
from django.core.management import call_command
from django.db.models import loading
from django import test

class TestCase(test.TestCase):
    apps = ()

    def _pre_setup(self):
        # Add the models to the db.
        self._original_installed_apps = list(settings.INSTALLED_APPS)
        for app in self.apps:
            settings.INSTALLED_APPS.append(app)
        loading.cache.loaded = False
        call_command('syncdb', interactive=False, verbosity=0)
        # Call the original method that does the fixtures etc.
        super(TestCase, self)._pre_setup()

    def _post_teardown(self):
        # Call the original method.
        super(TestCase, self)._post_teardown()
        # Restore the settings.
        settings.INSTALLED_APPS = self._original_installed_apps
        loading.cache.loaded = False

python

django

unit-testing

django-models

mocking

2022-11-12T19:46:42+00:00
Вопросы с похожей тематикой, как у вопроса:

Django: как динамически создавать модель только для тестирования