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

标签 c# unit-testing rhino-mocks

我在 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 会执行以下操作:

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

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

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

关于c# - Rhino Mock Expect() 方法触发对预期函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005195/

相关文章:

c# - Xamarin.iOS 中的 NSTimer 与 Timer - 何时使用什么?

java - Spring MVC 测试配置

c++ - NiceMock 一个将另一个 Mock 作为构造函数参数的 Mock

c# - ASP.NET MVC 3 ViewResult 子类的单元测试依赖项

unit-testing - Rhino 模拟 stub 异步方法

c# - 在 WPF DataGrid 中合并单元格

c# - HTTP 错误 403.14 - 禁止访问 - 带 IIS Express 的 MVC 4

c# - 在 .NET 中使用 PEM 编码的 RSA 私钥

unit-testing - Gradle测试任务-Gradle 1.6以及Gradle 2.3或更高版本

c# - 使用具有 ref 参数的方法的 AssertWasCalled 和 Stub