しばらくの間、Faker ツール ( Python Faker、Php Faker、Ruby Faker ...) を使用して、テストまたはデモ データ用のフィクスチャを生成しています。
私は常に同じ生成されたデータを取得したいので、ランダムシード機能を使用します。これは非常に簡単な例です:
import unittest
from faker import Faker
fake = Faker()
fake.seed(4321)
# My model
class Contact(object):
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
class TestCase(unittest.TestCase):
def test_basic(self):
c1 = Contact(fake.first_name(), fake.last_name())
self.assertEqual(c1.firstname, u'Deonte')
self.assertEqual(c1.lastname, u'Jaskolski')
c2 = Contact(fake.first_name(), fake.last_name())
self.assertEqual(c2.firstname, u'Anika')
self.assertEqual(c2.lastname, u'Dare')
unittest.main()
わかりました、すべてが素晴らしいです。
次に、プロジェクトに取り組み、新しいフィールドを Contact に追加する必要があります。
class Contact(object):
def __init__(self, firstname, lastname, city):
self.firstname = firstname
self.lastname = lastname
self.city = city
テストを更新します:
class TestCase(unittest.TestCase):
def test_basic(self):
c1 = Contact(fake.first_name(), fake.last_name(), fake.city())
self.assertEqual(c1.firstname, u'Deonte')
self.assertEqual(c1.lastname, u'Jaskolski')
self.assertEqual(c1.city, u'East Freddieside')
c2 = Contact(fake.first_name(), fake.last_name(), fake.city())
self.assertEqual(c2.firstname, u'Allison')
self.assertEqual(c2.lastname, u'Dibbert')
self.assertEqual(c2.city, u'West Leathabury')
1 回目と 2 回目のテストで "c2.firstname" と "c2.lastname" アサーションを見ると、私の苦労がわかります。フィクスチャ生成の途中で新しい偽のデータを挿入すると、次のすべてのアサーションを更新する必要があります。 .
小規模なテストなら問題ありませんが、複数回のテストは非常に苦痛です。
この問題に関するヒントはありますか?
多くの乱数発生器インスタンスを使用することを考えていますが、それは良い方向だと思いますか?