Django で factory_boy のシード値を固定する
結論
TestCase
を継承したカスタムクラスを作成して setUp()
にシード値を設定する。
各アプリではカスタムクラスを継承してテストを書く。
背景
Djangoで factory_boy
を使う際に、テストの再現性を担保したかった。
手順
環境
factory-boy==2.12.0
BaseTestCase
クラスの定義
シード値を固定する BaseTestCase
クラスを定義する。
自分は base
アプリケーションを作成して、抽象クラスはそこに書くようにしている。
from django.test import TestCase
import factory.random
class BaseTestCase(TestCase):
def setUp(self):
factory.random.reseed_random(0)
return super().setUp()
個別の TestCase
クラスの継承
BaseTestCase
クラスを継承して各テストケースを定義していく。
from base.tests import BaseTestCase
from .models import User
from .factories import UserFactory
class UserTestCase(BaseTestCase):
def test_create_user(self):
user = UserFactory()
actual_user = User.objects.get(pk=user.pk)
self.assertEqual(user, actual_user)
もちろん setUp()
を定義する際は親クラスのメソッドも呼んでおく。
class UserTestCase(BaseTestCase):
def setUp(self):
super().setUp()
print("initialize")
def test_create_user(self):
user = UserFactory()
actual_user = User.objects.get(pk=user.pk)
self.assertEqual(user, actual_user)
まとめ
シード値の固定により再現性を担保した状態でテストが実行できるようになった。
Djangoを前提の記事だが、Djangoに限らず通用するはず。
Author And Source
この問題について(Django で factory_boy のシード値を固定する), 我々は、より多くの情報をここで見つけました https://qiita.com/chanyou0311/items/d4cf39d07cf9eb43ab68著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .