2015-01-29 31 views
6

Mam metodę z następującym podpisem, że chciałbym skrótową:Czy można stosować Rhino Mocks do odgałęzienia ogólnej metody, w której nie zależy mi na typie?

async Task<T> MyMethod<T>(SomeClass, bool, string, string, string, params object[]) 

The typu rodzajowego, T, jest typem, który spodziewamy się, że metoda, aby powrócić (dane zwracane z serwera odlewa się typ T). Zauważ, że nie można wywnioskować z parametrów przekazanych; musi być określony za każdym razem.

Potrzebuję utworzyć skrót do tej metody w Rhino Mocks, ale oczekuję, że podam typ ogólny. Chciałbym, żeby służyły one do rozmów z dowolnego typu. Próbowałem użyć <object>, ale następnie oczekuje wywołania z tego konkretnego typu.

Rozumiem, dlaczego byłby to problem, ponieważ wywołania typów ogólnych są rozwiązywane podczas kompilacji, a nie w czasie wykonywania.

Myślałem, że warto o to zapytać, na wypadek, gdyby brakowało mi jakiejś sztuczki.

Edycja 1

powinno mam włączone, że teraz mam wdrożone obejście czym mam owinięty mój skrótową Konstruktora w metodzie pomocnika, która sama metoda rodzajowa.

Problem polega na tym, że muszę określić typ, a następnie tylko ten typ jest pokryty. Testowany system może wywołać kilka odwołań do metody, którą stosuję, i potrzebuję "catch all", który obsługuje wszystkie typy.

Edycja 2

Moja poprawiła obejście było nie używać Rhino Mocks w ogóle. Zamiast tego używam klasy próbnej, która implementuje interfejs. Ułatwia to wdrożenie metody ogólnej i zwraca wartość domyślną (lub taką, która została ustawiona podczas budowy). Nadal chciałbym wiedzieć, czy jest to możliwe w Rhino Mocks!

Odpowiedz

0

Można spróbować tworzenia niedopałek w sposób rodzajowy, i po prostu powrócić do domyślnego wystąpienia danego typu, tak jak poniżej:

static void SetUpAStub<T>() 
     where T : new() 
    { 
     var stub = MockRepository.GenerateStub<IMyInterface>(); 
     stub.Stub(i => i.MyMethod<T>(null, false, string.Empty, string.Empty, string.Empty)) 
      .Return(new TaskFactory().StartNew(() => new T())); 
    } 
+0

To co robiłem jako tymczasowe obejście problemu, ale system w ramach testu można wykonać kilka wywołań dla różnych typów, a każdy z nich będzie musiał zostać zgrupowany, aby nie stanowił wyjątku. Właśnie dlatego potrzebuję odcinka "catch all". Przepraszam - powinienem uwzględnić to w moim pytaniu. –

Powiązane problemy