2013-05-14 18 views
15

Potrzebuję utworzyć obiekt z AutoFixture, używając tylko System.Type. Jednak wydaje się, że nie ma przeciążenia CreateAnonymous(), które po prostu przybiera typ. Wszyscy oczekują generycznego czasu kompilacji T. Czy istnieje sposób przekonwertowania pliku System.Type na T?AutoFixture: jak utworzyć Anonimowy z Type.Type Typ

Edycja ze szczegółami Zastosowanie:

Używam AutoMapper, który ma hak służący do wstrzykiwania komponentów do obsługi złożonych scenariuszy mapowe:

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

Jak widać z podpisem, klienci mogą zarejestrować Func, którą AutoMapper wywołuje w dowolnym momencie, gdy potrzebuje wstrzykniętej usługi (głównie implementacje ValueResolver).

W kompilacjach produkcyjnych ta metoda wywołuje w moim kontenerze StructureMap w celu pobrania komponentu. Jednakże, gdy jednostka testuje mój kod odwzorowania, I musi podać implementacje skrótów, w przeciwnym razie AutoMapper zgłasza wyjątek. Ponieważ używam AutoFixture + Moq jako mojego pojemnika do automatyzacji, naturalne wydaje się, aby AF był w pełni uwodniony, dlatego mogę skoncentrować się na pisaniu kodu testu jednostkowego.

+2

Czy możesz powiedzieć więcej o swoim scenariuszu użytkowania? W jakim rodzaju testu nie znasz czasu kompilacji typu, więc nie możesz użyć metody "CreateAnonymous"? – nemesv

Odpowiedz

28

To possible, ale celowo ukryte, ponieważ należy bardzo rzadko trzeba to zrobić:

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

Istnieje mnóstwo punktów rozciągliwość AutoFixture że częściej niż nie, dostarczaj lepszej alternatywy niż słabo typowana metoda Create. Co próbujesz osiągnąć?

+0

Dzięki Mark. Pracowałam jak wdzięk –

+0

Dziękuję, Mark. W moim przypadku piszę jednego pomocnika, aby sprawdzić wszystkie właściwości instancji, aby upewnić się, że poprawnie podnoszą wydarzenie 'PropertyChanged'. Może być nieco hacky, ale wolałbym napisać test raz w sposób ogólny, a potem nie musiałbym się tym martwić. –

+0

@MattKlein Powinieneś rzucić okiem na [AutoFixture.Idioms] (http://www.nuget.org/packages/AutoFixture.Idioms), a następnie. Możesz zrobić to "IdiomaticAssertion". –

Powiązane problemy