views:

43

answers:

2

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 included in the mock so when the row Expect.Call(reader.ExtensionMethod()).Return(someValue) is reach the ExtensionMethod is executed which is not what I want! I want that call to be record and when the extension method is call from somewhere else I want it to return someValue.

Does anyone know how to get around this?

+2  A: 

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.

Slavo
Ok... so how does this help me solve the problem with RhinoMock?
mastoj
It doesn't :) I'm sorry it's not possible with RhinoMock. RhinoMock intercepts calls to methods by inheriting from an object and overriding them (that's why they have to be virtual). You cannot override a static (extension) method and that's the reason Rhino fails in this situation.
Slavo
So TypeMock can, yea?
abatishchev
I currently know of two libraries that can do it - JustMock, which I've linked to in my reply, and TypeMock (http://www.typemock.com/). They both use a profiler and intercept method calls on a lower level, without relying on overriding. This performs slower, but does the job.
Slavo
A: 

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.

mastoj