2011-03-18 62 views

回答

24

它可以完成,但它不能開箱即用。訣竅是實現IFakeObjectCallRule並通過Fake.GetFakeManager(foo).AddRule(myRule)將其添加到您的假。

我想,雖然實現這個功能,這將是這樣的:

A.CallTo(富).WhereMethod(X => x.Name == 「MyProtectedMethod」)返回(」。隨你」);

儘管如此,語法還不完善。

編輯 上面提到的功能,現在已經實現:

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

真棒。非常感謝新功能。現在我可以再次刪除我自己的規則。 – 2011-04-11 10:30:24

+0

我嘗試了上面提供的代碼,但MyProtectedMethod方法仍在調用中。我希望它能夠返回假的返回值,但不能調用原始方法。難道我做錯了什麼? – stusherwin 2011-05-16 13:13:29

+1

@stusherwin也許這個方法不是虛擬的? – 2012-03-23 07:26:04

12

除了帕特里克的答案,我認爲這將是在這個崗位相關的補充,你怎麼能嘲笑一個保護性的提示構件:

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

這實際上是如何反射對待「吸氣劑」性質的方法。

希望它能幫助:)