1

下午好

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

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>();

主要的期望是

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

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

4

2 回答 2

2

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

有关更多详细信息,请参阅以下 StackOverflow 线程

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

于 2011-03-30T15:46:11.473 回答
0

通过为扩展方法创建存根应该是可能的。

Mono 2.4 和 RhinoMocks 3.5 中的扩展方法

于 2012-07-11T23:48:08.827 回答