How to mock extension methods with Rhino Mock?

后端 未结 4 1502
日久生厌
日久生厌 2020-12-20 15:25

I have extended objects of type IDataReader with some extension methods that I needed. The problem is now when I try to mock the IDataReader, the extended method is not incl

相关标签:
4条回答
  • 2020-12-20 15:50

    The answer seems to be no at the moment. To bad though, but I solved my problem with writing a mock class for my interface I wanted to mock instead. Since I didn't needed that many methods of the interface it went pretty fast.

    0 讨论(0)
  • 2020-12-20 15:53

    It is possible to stub extension method or any other static method without any framework. The following code allows you to do so, you just need to stub _doSumm.

    public static class MyExtensions
    {
        public static Func<int,int, int> _doSumm = (x, y) => x + y;
    
        public static int Summ(this int x, int y)
        {
            return _doSumm(x, y);
        }
    }
    
    0 讨论(0)
  • 2020-12-20 15:57

    Disclosure: I work for Telerik.

    Extension methods are in fact static methods concealed as instance methods. RhinoMock cannot mock static methods and there's no way you can do it, unless you use another mocking library, which uses a profiler.

    Such a library is JustMock by Telerik.

    0 讨论(0)
  • 2020-12-20 15:58

    In my own instance, I wrapped the extension methods I had to stub into methods of a helper class that exposed the wrapper methods in a new interface. I switched my production code to have an instance of this helper class injected and changed the code to call the new methods. The unit tests are injecting a conveniently crafted stub of the helper interface.

    While this solution is not perfect, it is still less dramatic than swapping the mocking framework.

    0 讨论(0)
提交回复
热议问题