2013-09-23 11 views
5

mogę typ parametru konstruktora tak:Jak wygenerować obiekt pośredniczący z dowolnego typu nie znany w czasie kompilacji używając AutoFixture

Type type = paramInfo.ParameterType; 

Teraz chcę utworzyć obiektu skrótową od tego typu. Czy to możliwe? Próbowałem z autofixture:

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

.. ale to nie działa:

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

mógłbyś mi pomóc?

+0

Czy autoformat ma w ogóle nietypowy interfejs API? Przełączanie między odbiciem ("Type") i generycznymi ('') jest ... trochę bolesne (i powolne) - możesz * zrobić * to (z jeszcze większą refleksją) - ale najlepiej tego unikać, jeśli w ogóle możliwe .. –

+1

Wygląda na to, że AutoFixture nie zapewnia łatwego rozwiązania tego problemu: http://thomasardal.com/non-generic-createanonymous-method-for-autofixture/ – meilke

+0

Czy mimo to można utworzyć stub z typem? (z lub bez autoformowania) – user2598794

Odpowiedz

10

AutoFixture robi mają nierodzajową API do tworzenia obiektów, albeit kind of hidden (by design):

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

Jako blog post połączonych @meilke zwraca uwagę, jeśli okaże się to często konieczności, można ująć go w metodę rozszerzenia:

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

który pozwala po prostu zrobić:

var obj = fixture.Create(type); 
Powiązane problemy