2014-04-28 21 views
11

Doğrudan Django testlerinde ORM/model örnekleri oluşturulmasında factory_boy'un neden tercih edildiğini anlamıyorum. Ve factory_boy web sitesinin kullanmanın yararlarını açıklamak için çok az şey var. yönetmek zordurfactory_boy neden testlerde doğrudan ORM'yi kullanmaya daha üstün?

Bu armatürleri alternatif olarak mantıklı, yavaş vb vb

Ama neden sadece testler için gerektiği gibi modeli örneklerini oluşturmaz?

Eğer factory_boy tamamen db'ye yazmanın tam yerini aldıysa, bu durumda, çok faydalı olacağını düşünüyorum, ancak fabrikadaki çocuk oluşturulan django model örnekleri hala veritabanıyla etkileşime girer. Diğer bir potansiyel fayda, dizilerin desteklenmesidir, ancak fabrikaya ihtiyaç duymadan diziler/örnek veriler oluşturmak zor değildir.

Sonuç olarak, fabrikada çocuk kullanmayla ilgili neredeyse hiçbir fayda görmüyorum, vs doğrudan nesne/model örnekleri oluşturmuyorum.

Umarım göze çarpan bir şey eksik.

cevap

9

Evet, test verilerinizi doğrudan django ORM kullanarak hazırlayabilirsiniz.

  • modeliniz fabrikaları güzel, temiz ve okunabilir şekilde tanımlanmıştır

    :

    class CasesFactory(factory.Factory): 
        FACTORY_FOR = models.Case 
    
        number = factory.Sequence(lambda n: '1021-{0}'.format(n)) 
        create_date = datetime.datetime.now() 
    
  • Ama fabrika ve factory_boy kullanmanın avantajları vardır özellikle burada hatırladığım o bazı ve kullanımıdır Bu sınıf temelli yaklaşımın bir başka yararı, ForeignKey, revers gibi farklı türdeki ilişkiler için de kolayca tanımlayabileceğiniz SubFactories

  • oluşturma becerisidir. E ForeignKey, ManyToMany (documentation)

  • düzgün (eğer söz ettik gibi) DjangoModelFactory sınıf
  • Sequence s veri daha "dinamik" olmasına yardımcı olur. Kendiniz halledin.
  • mute_signals dekoratör - bazen sinyal factory_boy test verileri oluşturmak için yazma "yardımcı" fonksiyonları vardır kaçınmaktır, Temelde

gönderilecek istemiyoruz test ederken. Bunun yerine, güzel ve kullanımı kolay bir arayüz sunuyor.

Kendinize sorun: tekerleği yeniden icat etmek neden iş için özel bir araç var?

Ayrıca bakınız:

+1

ekleyerek gereken bir başka gerçekten temel bir: Eğer testler için kullanılacak varsayılan değerler belirtebilirsiniz gerçek modele varsayılan olarak kalmadan kendisi.Gerçek uygulamada açık bir şekilde sağlanmadıklarında hata yapması gereken Gerçekten Önemli Özniteliklere sahipseniz bu harika bir özelliktir (bu nedenle model varsayılanına sahip olamazsınız), ancak bazı testlerinizde bunları gerçekten önemsemezsiniz. vakalar. –