@chemdev

Как подойти к тестированию классов с классовыми атрибутами — сущностями БД?

models.py
from django.db import models


class PropertyModel(models.Model):
    name = models.TextField()


class Entity(models.Model):
    name = models.TextField
    property = models.ForeignKey(PropertyModel, models.PROTECT)


apps.py
from django.apps import AppConfig


class MyAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'my_app'

    def ready(self):
        from .models import PropertyModel
        # from .constant import CONST1, CONST2
        CONST1, CONST2 = "text1", "text2"
        PropertyModel.objects.get_or_create(name=CONST1)
        PropertyModel.objects.get_or_create(name=CONST2)


utils.py
from .models import Entity, PropertyModel
# from .constant import CONST1, CONST2
CONST1, CONST2 = "text1", "text2"


class BuisnessLogicProvider:
    CONST1_MODEL = PropertyModel.objects.get(name=CONST1)
    CONST2_MODEL = PropertyModel.objects.get(name=CONST2)

    def some_logic(self, name: str) -> Entity:
        instance = Entity.objects.create(name=name, property=self.CONST1_MODEL)
        return instance


При написании теста для такой функциональности возникают трудности. Так как джанго постоянно очищает тестовую базу, код тестов будет падать ошибкой, мол такого первичного ключа в ссылаемой таблице нет при создании сущности Entity. Как можно решить эту проблему? Я понимаю, что это, вероятнее всего архитектурная ошибка, но PropertyModel в любом случае должны быть именно строками в БД, а не просто строковыми константами, определенными в коде как возможный выбор. Других ограничений нет.

tests/test_my_app/test_utils.py
from django.test import TestCase
from my_app.utils import BuisnessLogicProvider

class TestBuisnessLogicProvider(TestCase):
    def setUp(self):
        self.provider = BuisnessLogicProvider()

    def test_some_logic(self):
        pass
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы