Moq允许模拟受保护的虚成员 (参见此处)。在FakeItEasy中是否也可以做到相同的效果?
这是可以实现的,但是不能直接使用。关键是要实现IFakeObjectCallRule并通过Fake.GetFakeManager(foo).AddRule(myRule)将其添加到fake中。
我正在考虑实现这个功能,代码大概会像这样:
A.CallTo(foo).WhereMethod(x => x.Name == "MyProtectedMethod").Returns("whatever");
不过语法还没有完全细化。
编辑 上述功能现已实现:
A.CallTo(foo).Where(x => x.Method.Name == "MyProtectedMethod").WithReturnType<int>().Returns(10);
除了Patrik的答案之外,我认为在这篇帖子中增加一个提示会很有帮助,它可以告诉你如何模拟受保护的属性成员:
A.CallTo(foo).Where(x => x.Method.Name == "get_MyProtectedProperty").WithReturnType<int>().Returns(10);
这实际上是反射处理属性的“getter”方法的方式。希望能有所帮助 :)