2013-05-14 14 views
15

Bir System.Type öğesinden başka bir şey kullanmadan AutoFixture'dan bir nesne oluşturmam gerekiyor. Ancak, sadece bir tür alır CreateAnonymous() bir aşırı yük olduğu görünmüyor. Hepsi bir derleme zamanı jenerik T bekliyoruz. Bir System.Type'ı T'ye dönüştürmenin bir yolu var mı? kullanım detayları ileAutoFixture: Bir System.Type Oluşturma Adı Nasıl Oluşturulur

Düzenleme: Karmaşık haritalama senaryoları destekleyecek bileşenleri enjekte edilmesi için bir kancaya sahiptir AutoMapper, kullanıyorum

:

void ConstructServicesUsing(System.Func<Type,object> constructor) 

Eğer imza görebileceğiniz gibi, müşteriler kayıt olabilirsiniz AutoMapper'ın, enjekte edilen bir hizmete (çoğunlukla ValueResolver uygulamaları) ihtiyaç duyduğu her an aldığı bir Func.

Üretimde, bu yöntem bir bileşen almak için StructureMap kapsayıcımı çağırır. Ancak, eşleme kodumun birimini test ettiğimde, , saplama uygulamalarını sağlamalıdır, aksi takdirde AutoMapper bir istisna atar. AutoFixture + Moq'u otomobil konteyneri olarak kullandığım için, AF'yi tamamen hidrate edilmiş bir stub'a yükseltmek doğal görünmektedir, bu yüzden birim test koduna odaklanabiliyorum.

+2

Kullanım senaryonuz hakkında daha fazla bilgi verir misiniz? Ne tür bir testte tür derleme zamanınızı bilmiyorsunuz, bu yüzden 'CreateAnonymous' yöntemini kullanamazsınız? – nemesv

cevap

28

Eğer çok nadiren bunu yapmak gerektiğinde, çünkü kasıtlı gizli possible, ama:

var specimen = new SpecimenContext(fixture).Resolve(type); 

genişletilebilirlik noktaları ton AutoFixture ki vardır, Daha sık olmamakla birlikte, zayıf yazılan bir Oluşturma yönteminden daha iyi bir alternatif sağlar. Neyi başarmaya çalışıyorsun?

+0

Teşekkürler Mark. Bir çekicilik gibi çalıştı –

+0

Ayrıca teşekkürler, Mark. Benim durumumda, 'PropertyChanged' olayını düzgün bir şekilde yükseltmelerini sağlamak için tüm örnek özelliklerini kontrol etmek için tek bir yardımcı yazarım. Biraz hacky olabilir, ama testi bir kez genel bir şekilde yazmayı tercih ederim ve sonra bunun için endişelenmem. –

+0

@MattKlein Daha sonra [AutoFixture.Idioms] 'a (http://www.nuget.org/packages/AutoFixture.Idioms) göz atmalısınız. Bunu bir "Deyimsel Durum" haline getirebilirsin. –

İlgili konular