2013-09-23 7 views
5

I Art von Konstruktorparameter wie folgt zu erreichen:Wie ein Stub-Objekt eines beliebigen Typ erzeugen, nicht bei der Kompilierung bekannt AutoFixture mit

Type type = paramInfo.ParameterType; 

Jetzt mag ich Stub-Objekt von dieser Art erstellen. Ist das möglich? Ich habe versucht, mit autofixture:

public TObject Stub<TObject>() 
{ 
    Fixture fixture = new Fixture(); 
    return fixture.Create<TObject>(); 
} 

.. aber es funktioniert nicht:

Type type = parameterInfo.ParameterType; 
var obj = Stub<type>();//Compile error! ("cannot resolve symbol type") 

Können Sie mir helfen?

+0

Hat die Autofixtur überhaupt eine nicht generische API? Zwischen Spiegelung ('Type') und Generika (' ') zu wechseln ist ... irgendwie schmerzhaft (und langsam) - du kannst es * tun (mit noch mehr Nachdenken) - aber es wird am besten vermieden, wenn es überhaupt möglich ist .. –

+1

Scheint wie AutoFixture bietet keine einfache Lösung für dieses Problem: http://thomasardal.com/non-generic-createanonymous-method-for-autofixture/ – meilke

+0

Ist es irgendwie möglich, Stub mit Typ zu erstellen? (mit oder ohne Autofixture) – user2598794

Antwort

10

AutoFixture tut haben eine nicht-generischen API-Objekte zu erstellen, albeit kind of hidden (by design):

var fixture = new Fixture(); 
var obj = new SpecimenContext(fixture).Resolve(type); 

Als blog post von @meilke verknüpft weist darauf hin, wenn Sie sich diese oft benötigen finden, können Sie es einkapseln in eine Erweiterungsmethode:

public object Create(this ISpecimenBuilder builder, Type type) 
{ 
    return new SpecimenContext(builder).Resolve(type); 
} 

, die Sie tun einfach ermöglicht:

var obj = fixture.Create(type);