django model mocking 객체 생성 패키지

factory-boy - 기본적으로 faker provider에서 제공하는 데이터를 이용해 더미 데이터 생성

docs - basic usage

import factory

class ConversationHistoryFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = ConversationHistory
        django_get_or_create = ("session_id",)
        skip_postgeneration_save = True

    session_id = factory.Faker("uuid4")
    user = factory.Faker("name")
    role = factory.Faker("pystr")
    
    
# transaction x - transaction 테스트가 필요하지 않을 때 build
chat_history = ConversationHistoryFactory.build()
chat_histories = ConversationHistoryFactory.build_batch(3)
len(chat_histories)  # queryset이 아닌 파이썬 객체 3개 생성
>> 3
history_count = ConversationHistory.objects.count()
>> 0

# transaction o - transaction 테스트가 필요할 때 create
chat_history = ConversationHistoryFactory()
chat_histories = ConversationHistoryFactory.create_batch(3)
len(chat_histories)
>> 3
history_count = ConversationHistory.objects.count()
>> 3

history = ConversationHistory.objects.last()
history.session_id
>> 'def03fc9-74bc-48f1-b189-1c152cbc2182'
history.user
>> 'Sean Chambers'

baker: 더미 데이터 모델 객체 생성(임의 데이터)

docs - basic usage

from model_baker import baker

# transaction x
chat_history = baker.prepare("conversations.ConversationHistory")
ConversationHistory.objects.count()
>> 0

# transaction o
chat_history = backer.make("conversations.ConversationHistory")
chat_history.session_id
>> 'ribAQhdHvwnQAauajVieDpMPiWdKodGDYZyPWusNbnboTEaszNtirypbPUJNSaMpDWPdoywGrhzvmyMWFwmGLcQQOtqkwHiXztudqymJErgtWgFpQPWLyWExOPVZTvGF'
chat_history.role
>> 'TeCSxEdEqtRuCHgcJGpZMjYGKuObrykJ'
chat_history.user  # null=True
>> (None)
# 명시적값 지정
chat_history_with_user = backer.make("conversations.ConversationHistory", user="jh")
chat_history_with_user.user
>> 'jh'