2013-09-23 14 views
5

posso ottenere tipo di parametro del costruttore in questo modo:come generare un oggetto stub di un tipo arbitrario non è noto al momento della compilazione usando AutoFixture

Type type = paramInfo.ParameterType; 

Ora voglio creare l'oggetto stub da questo tipo. È possibile? Ho provato con autofixture:

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

.. ma non funziona:

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

Mi può aiutare?

+0

La creazione automatica ha un'API non generica? Passare da reflection ('Type') a generici (' ') è ... un po 'doloroso (e lento) - puoi * farlo * (con ancora più riflessione) - ma è meglio evitarlo se possibile. –

+1

Sembra che AutoFixture non offra una soluzione semplice per questo problema: http://thomasardal.com/non-generic-createanonymous-method-for-autofixture/ – meilke

+0

È possibile comunque creare lo stub con Type? (con o senza autofixture) – user2598794

risposta

10

AutoFixture fa hanno un API non generico per creare oggetti, albeit kind of hidden (by design):

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

Come il blog post collegati da @meilke sottolinea, se vi trovate a dover spesso, si può incapsulare in un metodo di estensione:

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

che permette di fare semplicemente:

var obj = fixture.Create(type); 
Problemi correlati