【问题标题】:Rhino Mock Expect() method triggers call on expected functionRhino Mock Expect() 方法触发对预期函数的调用
【发布时间】:2015-03-12 08:44:10
【问题描述】:

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

   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 Mocks 出现问题。请注意,即使 Rhino Mocks 的作者现在也不会使用它 - 您至少应该考虑使用替代方案。

标签: c# unit-testing rhino-mocks


【解决方案1】:

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

  1. 它在运行时生成动态程序集(使用Castle Dynamic Proxy 库来做到这一点)
  2. 在该程序集中,Rhino 创建一个新类型,派生自您要模拟的类型
  3. 覆盖该新类型的成员以插入记录/存根逻辑

实际上,您只能模拟virtual/abstract 类的方法和接口的任何成员。

请记住,此限制存在于所有免费的模拟框架中。

【讨论】:

  • 我的手砸在我的头上。当然,就是这样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多