14

için tohum yöntemi çağrısını ayırın entegrasyon testini veri havuzlarıma eklemek istiyorum.Varlık çerçevesini sınama entegrasyonu - yalnızca PROD -

Her bir entegrasyon testi yönteminden önce test verilerini kurmak ve eklemek istiyorum. Sonra Sonra mantık veritabanından doğru verileri dönerek çalıştığını iddia etmek istediğinizden benim depo mantığı yürütmek istiyoruz.

DbSet ;-) sadece gerçek entegrasyon testleri ile alay etmek ve test etmek istemiyorum.

Sorum şu: Veritabanının tüm kurulumu ve test verilerini temizlemeyle ilgili.

bir TestDatabase ve ProdDatabase üreten kodu ilk yaklaşım kullanır. ProdDatabase I tohum gerçek verileri UI'de oynatmak ve doğru davranışı denetlemek için. TestDatabase sadece entegrasyon testleri içindir.

İkisi veritabanları BİR bağlamdan oluşturulur.

Ben bir varlığın herhangi özelliğini değiştirdiğinizde ve o zaman benim DBContext gelen üzerine yazılır Tohum yöntemi de denir benim entegrasyon testleri çalıştırın. Ama bunu TestDatabase'im için istemiyorum.

Tohum çağrısını yalnızca ProdDatabase'im için nasıl ayırabilirim? Ve benim TestDatabase benim test başına kendi "tohum"/kurulum verilerini üretir? Her durumda

+0

Hangi 'IDatabaseInitializer' kullanıyorsunuz? – jjj

+0

CreateDatabaseAlways. – Pascal

+0

Üretimde bile mi? – jjj

cevap

6

yapabilirsiniz set a differentIDatabaseInitializer veya DbMigrationsConfiguration uygulama başlatma sırasında (eğer başlatıcısı için MigrateDatabaseToLatestVersion kullanıyorsanız): Üretim vs. için farklı configuration file settings kullanılarak

System.Data.Entity.Database.SetInitializer(new TestOrProdInitializer()); 

Hatta veritabanı başlatıcı ayarlayabilirsiniz Test:

<contexts> 
    <context type=" Blogging.BlogContext, MyAssembly"> 
    <databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" /> 
    </context> 
</contexts> 

Eğer düşüşten sonra reseed gerekiyorsa veritabanına ping, ayrıca dbContext.Database.Initialize(true) ile başlatmayı zorlayabilirsiniz.

+0

İçeriği sorgulamadan önce veritabanı ile oluşturulmasını nasıl zorlayabilirim? Context.Database.Initialize (true) 'un bunu yaptığını ancak kod çalıştırdıktan sonra veritabanının hala eski verilere sahip olduğunu ve bu yüzden silinmediğini düşündüm. – Pascal

+0

Eğer 'context.Database.Delete' deneyebilir? teknik olarak olsa da zaten çağrılmalıdır (bkz. [bu] (https://msdn.microsoft.com/en-us/library/gg679506 (v = vs.113) .aspx)). Belki de SetInitializer'ı çağırmayı çağırmadan hemen önce arayabilirsin. – jjj

+0

ama ctx.database.Initialize (true) ne zaman context.Database.Delete veritabanı oluşturmaz. – Pascal

İlgili konular