如何使用Rhino Mock模拟扩展方法?

Tom*_*son 9 c# mstest rhino-mocks

我有一些IDataReader类型的对象扩展我需要的扩展方法.问题是,当我尝试模拟IDataReader时,扩展方法不包含在模拟中,所以当行Expect.Call(reader.ExtensionMethod()).Return(someValue)到达时ExtensionMethod执行的不是我想要的!我希望该调用是记录,当扩展方法从其他地方调用时,我希望它返回someValue.

有谁知道怎么解决这个问题?

Sla*_*avo 15

披露:我为Telerik工作.

扩展方法实际上是作为实例方法隐藏的静态方法.RhinoMock不能模拟静态方法,除非你使用另一个使用分析器的模拟库,否则你无法做到这一点.

这样的库是Telerik的JustMock.

  • 它没有:)我很抱歉RhinoMock不可能.RhinoMock通过继承对象并覆盖它们来拦截对方法的调用(这就是为什么它们必须是虚拟的).你无法覆盖静态(扩展)方法,这就是Rhino在这种情况下失败的原因. (2认同)

Tom*_*son 2

目前看来答案是否定的。糟糕的是,但我通过为我想要模拟的界面编写模拟类解决了我的问题。由于我不需要那么多接口方法,所以速度非常快。

  • 那我不知道你为什么不接受斯拉沃的回答,因为他也说了同样的话,而且他是第一个:) (6认同)