Rhino Mock Expect()方法触发对预期函数的调用

Udo*_*now 4 c# unit-testing rhino-mocks

我在C#中使用Rhino Mocks 3.6并且在模拟对象而不是接口时遇到问题.有人可以解释为什么在定义期望时实际调用方法?

   public class MockingBird
   {
      public void TestMethod()
      {
         throw new Exception("Method call!");
      }
   }
Run Code Online (Sandbox Code Playgroud)

...

 [TestMethod]
  public void TestMock()
  {
     var mockedMockingBird = MockRepository.GenerateStrictMock<MockingBird>();
     mockedMockingBird.Expect(x => x.TestMethod());
  }
Run Code Online (Sandbox Code Playgroud)

k.m*_*k.m 5

您不能模拟不可覆盖的方法.在创建模拟实例时,Rhino执行以下操作:

  1. 它在运行时生成动态程序集(使用Castle Dynamic Proxy库来执行此操作)
  2. 在该程序集中,Rhino创建了一个新类型,派生自您想要模拟的类型
  3. 重写该新类型的成员以插入记录/存根逻辑

在实践中,您只能模拟virtual/ abstract类的方法和接口的任何成员.

请记住,所有免费模拟框架都存在此限制.