RhinoMocks - Stub a Method That Returns a Parameter
-
19-09-2019 - |
Question
I am using RhinoMocks, I need to stub a method, and always have it return the third parameter, regardless of what is passed in:
_service.Stub(x => x.Method(parm1, parm2, parm3)).Return(parm3);
Obviously, it ain't that easy. I don't always know what the parms are going to be, but I know I always want to return the 3rd one.
Solution
You can provide an implementation for a method with the Do() handler:
Func<TypeX,TypeY,TypeZ,TypeZ> returnThird = (x,y,z) => z;
mock.Expect(x => x.Method(null, null, null)).IgnoreArguments().Do(returnThird);
Note that TypeZ
appears twice because it is both an input argument type and the return type.
OTHER TIPS
This worked for me:
_service
.Stub(x => x.Method(Arg<string>.Is.Anything, ... ))
.Return(null) // ... or default(T): will be ignored but RhinoMock requires it
.WhenCalled(x =>
{
// This will be used as the return value
x.ReturnValue = (string) x.Arguments[0];
});
You could use the expect method with a callback to return the value that you are after. The following will return null.
_service.Expect(o => o.Method(null, null, null))
.Callback((object parm1, object parm2, object parm3) => { return parm3; });
I am not sure if you can use Callback on Stub.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow