2009-08-28 13 views
8

Czy istnieje sposób z Rhino Mocks, aby ustawić właściwość Stub, jeśli wywoływana jest metoda.Rhino Mocks - Ustaw właściwość, jeśli metoda nazywa się

coś takiego: (Fałszywy Kod pogrubione)

callMonitor.Expect (x => x.HangUp()). SetProperty (callMonitor.InACall = false);

Metoda HangUp zwraca pustkę i nie mogę tego zmienić. Ale chcę, aby mój kod pośredniczący wiedział, że połączenie zostało zawieszone po wywołaniu HangUp.

Odpowiedz

10

Możesz użyć metody "WhenCalled", aby uruchomić własny kod po wywołaniu kodu pośredniczącego; jestem pewien, że powinien również działać z Mocks. Zgodnie z dokumentacją, WhenCalled jest zamiennikiem/uaktualnieniem dla Callback.

callMonitor.Expect(x => x.HangUp()) 
.WhenCalled(invocation => callMonitor.InCall = false); 

Kilka informacji na końcu tego postu: http://grahamnash.blogspot.com/2008/10/rhino-mocks-35.html

+0

Nadal nadużycie, mimo że nazwa metody została zmieniona. WhenCalled, podobnie jak Callback, jest przeznaczony do zaawansowanej oceny oczekiwań, a nie do arbitralnego obliczania. – tvanfosson

+0

Co byś zamiast tego polecił? Test podwójnego rzutu podwójnego? –

+0

Właściwie, chciałbym zobaczyć test. Wydaje mi się, że jeśli test jest wystarczająco skoncentrowany, może nie być potrzeby. – tvanfosson

1

Może być kilka warunków, w których musiałbyś to zrobić, ale generalnie spodziewam się, że po prostu instrumentowałbyś próbę/kodeks, aby zwracał prawidłowe wartości w odpowiedzi na twój kod. Jedyne wyjątki od tego, co mogę wymyślić, to częściowe drwiny, w których testujesz jedną część klasy i chcesz drwić z innych części.

Ustawienie makiety na obiekcie jest dość łatwe.

callMonitor.Expect(x => x.HangUp()); 
callMonitor.Expect(x => x.InACall).Return(false); 

Jeśli kod callMonitor jest skrótem, można ustawić właściwość bezpośrednio.

callMonitor.Stub(x => x.HangUp()); 
callMonitor.InACall = false; 
1

Tak, można użyć oddzwan metody:

callMonitor.Expect(x => x.HangUp()).Callback(() => callMonitor.InCall = false); 
+0

Dokładnie co bym napisał (gdybym natknąć to pytanie 6 minut temu;) –

+0

Horrible nadużywania mechanizmu zwrotnego. Trudno powiedzieć, ponieważ nie ma wielu informacji w poście, ale uważam, że OP nie jest wystarczająco skoncentrowany w testach. Przeczytaj przestrogi Ayende dotyczące używania wywołań zwrotnych na http://ayende.com/Wiki/(S(zwkmge45vdgkgvznp13mgc55))/Rhino+Mocks+Callbacks.ashx – tvanfosson

+2

FWIW - wywołanie zwrotne powinno być używane do oceny, czy oczekiwania były spełnione, aby nie wykonywać arbitralnych obliczeń. – tvanfosson

-1

nie jestem ekspertem RhinoMocks, ale wierzę, że to powinno działać.

SetupResult.For(callMonitor.InACall).Return(false); 
+0

Sądzę, że nie o to pytał. Zapytał, czy istnieje sposób, aby nadać metodzie HangUp improwizowaną implementację, która ustawia właściwość InCall na false, gdy wywoływana jest metoda HangUp. To, co tam masz, spowoduje, że metoda InAcall zwróci wartość false bez względu na to, czy wywołano metodę HangUp, czy nie. –

Powiązane problemy