我在 C# 中使用 Rhino Mocks 3.6,我在模拟对象而不是接口(interface)时遇到问题。 有人可以解释为什么在定义期望时实际上会调用方法吗?
public class MockingBird
{
public void TestMethod()
{
throw new Exception("Method call!");
}
}
...
[TestMethod]
public void TestMock()
{
var mockedMockingBird = MockRepository.GenerateStrictMock<MockingBird>();
mockedMockingBird.Expect(x => x.TestMethod());
}
最佳答案
您不能模拟不可覆盖的方法。创建模拟实例时,Rhino 会执行以下操作:
- 它在运行时生成动态程序集(使用 Castle Dynamic Proxy 库来做到这一点)
- 在该程序集中,Rhino 创建了一个新类型,派生自您要模拟的类型
- 覆盖该新类型的成员以插入记录/ stub 逻辑
在实践中,您只能模拟类的virtual
/abstract
方法和接口(interface)的任何成员。
请记住,此限制存在于所有免费模拟框架中。
关于c# - Rhino Mock Expect() 方法触发对预期函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005195/