2013-05-14 17 views
15

Ich muss ein Objekt von AutoFixture nur mit einem System.Type erstellen. Es scheint jedoch keine Überlastung von CreateAnonymous() zu sein, die einfach einen Typ annimmt. Sie alle erwarten eine generische T für die Kompilierung. Gibt es eine Möglichkeit, einen System.Type in T umzuwandeln?AutoFixture: wie CreateAnonymous von einem System.Type

Bearbeiten mit Nutzungsdetails:

Ich verwende AutoMapper, die einen Haken Komponente zum Injizieren komplexe Mapping-Szenarien zu unterstützen:

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

Wie Sie aus der Signatur sehen, können Kunden registrieren eine Func, die AutoMapper immer dann aufruft, wenn sie einen injizierten Dienst benötigt (meistens ValueResolver-Implementierungen).

In Produktions-Builds ruft diese Methode in meinem StructureMap-Container auf, um eine Komponente abzurufen. Wenn Sie jedoch Unit-Testing für meinen Mapping-Code verwenden, muss Stub-Implementierungen bereitstellen, sonst löst AutoMapper eine Ausnahme aus. Da ich AutoFixture + Moq als Autofokus-Behälter benutze, scheint es normal zu sein, dass AF einen vollständig hydratisierten Stub neu aufbaut, so dass ich mich auf den Testcode der Testeinheit konzentrieren kann.

+2

Können Sie mehr über Ihr Nutzungsszenario erfahren? In welcher Art von Test kennen Sie Ihre Kompilierzeit nicht, also können Sie die 'CreateAnonymous' Methode nicht verwenden? – nemesv

Antwort

28

Es ist possible, aber absichtlich versteckt, da sollten Sie sehr selten dies tun müssen, um:

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

Es gibt Unmengen von Erweiterungspunkte in AutoFixture dass, bieten Sie in den meisten Fällen eine bessere Alternative als eine schwach typisierte Create-Methode. Was versuchst du zu erreichen?

+0

Danke Mark. Arbeitete wie ein Charme –

+0

Danke auch, Mark. In meinem Fall schreibe ich einen einzelnen Helfer, um alle Eigenschaften einer Instanz zu überprüfen, um sicherzustellen, dass sie das Ereignis 'PropertyChanged' richtig auslösen. Kann ein bisschen hacky sein, aber ich würde es vorziehen, den Test einmal auf generische Weise zu schreiben und dann nicht darüber zu sorgen. –

+0

@MattKlein Sie sollten sich dann [AutoFixture.Idioms] (http://www.nuget.org/packages/AutoFixture.Idioms) anschauen. Du könntest das eine "Idiomatische Artertion" machen. –

Verwandte Themen