2011-03-18 12 views

Odpowiedz

24

Można to zrobić, ale nie można tego zrobić po wyjęciu z pudełka. Sztuką jest implementacja IFakeObjectCallRule i dodanie jej do fałszywej przez Fake.GetFakeManager (foo) .AddRule (myRule).

myślę o realizacji tej funkcji, chociaż byłoby coś takiego:

A.CallTo (foo) .WhereMethod (x => x.Name == "MyProtectedMethod") zwraca (”. cokolwiek");

Składnia nie jest jeszcze dopracowana.

Edit Funkcja wspomniano powyżej jest teraz realizowany:

A.CallTo(foo).Where(x => x.Method.Name == "MyProtectedMethod").WithReturnType<int>().Returns(10); 
+0

Awesome. Wielkie dzięki za nową funkcję. Teraz mogę ponownie usunąć moją własną regułę. –

+0

Próbowałem kodu podanego powyżej, ale metoda MyProtectedMethod jest nadal wywoływana. Spodziewam się, że zwróci fałszywą wartość zwracaną, ale nie wywoła oryginalnej metody. czy robię coś źle? – stusherwin

+1

@stusherwin Być może ta metoda nie jest wirtualna? –

12

Oprócz odpowiedzi Patrik jest, myślałem, że to być istotne w tym poście, aby dodać końcówkę jak można kpić zabezpieczonego mienia członek:

A.CallTo(foo).Where(x => x.Method.Name == "get_MyProtectedProperty").WithReturnType<int>().Returns(10); 

W ten sposób refleksja traktuje metody "zdobywania" właściwości.

Mam nadzieję, że to pomoże :)

Powiązane problemy