如何在 Rhino Mocks 3.6 中将 Expect 设置为扩展方法

Posted

技术标签:

【中文标题】如何在 Rhino Mocks 3.6 中将 Expect 设置为扩展方法【英文标题】:How to set Expect to a Extension method in Rhino Mocks 3.6 【发布时间】:2011-03-30 15:43:17 【问题描述】:

下午好

我有一个类,它有一个关联的扩展方法。

public class Person
    public int ID get;set
    public string Name get;set

扩展方法:

public static class Helper 
   public static int GetToken(this Person person)
       int id = 0;
       //Something here is done to read token from another service...
       return id;
   

现在我正在尝试使用 Rhino 并测试此方法

public void readPersonToken(int personId) 

   var person = Person.GetPersonInfo(personId);//we consume a service here
   Console.Writeline(person.GetToken());//get token is consuming another service


假设我正在编写测试并且已经有一个调用 GetPersonInfo() 的接口

var _interface = MockRepository.GenerateMock<IMyInterface>();

而主要的Expect是

_interface.Expect(x => x.GetPersonInfo(2))
          .Return(new Person  ID=2, Name = "A Stubbed Monica!" );

如何为扩展方法 GetToken 创建测试?

【问题讨论】:

很难准确了解这里发生了什么,尤其是有趣的部分是您从扩展方法中删除的代码。 【参考方案1】:

扩展方法只是静态方法的语法糖。所以你真正需要的是在这里模拟静态方法的能力。不幸的是,这在 Rhino Mocks 中是不可能的。

有关详细信息,请参阅以下 *** 线程

Mocking Static methods using Rhino.Mocks

要模拟静态方法,您需要一个实际使用 CLR 分析器拦截方法调用的模拟框架。正如线程提到的那样,TypeMock 应该能够做到这一点。

【讨论】:

【参考方案2】:

应该可以通过为扩展方法创建存根来实现。

Extension methods in Mono 2.4 and RhinoMocks 3.5

【讨论】:

以上是关于如何在 Rhino Mocks 3.6 中将 Expect 设置为扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Rhino Mocks 保存到存储库

Rhino Mocks - 使用 ref/out 参数模拟集合

Rhino Mocks 默认返回类型?

无法使用 Rhino Mocks 模拟具有数组参数的构造函数的类

Rhino Mocks 上的 mock 和 stub 有啥区别?

Rhino Mocks:实例化 Mock 属性,以便 Expectation 可以引用它