Can I set up a mock to always return the object given in one of the arguments?
Can I set up a mock object to always return the object given as a parameter? I have a method
public MyObjec开发者_JAVA技巧t DoSomething(MyObject obj)
and I want to have a mock which always returns obj for every call to DoSomething, sort of like this:
mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).Return(Arg<MyObject>)
although I'm not sure of what to put in the return bit...
EDIT: I tried this:
MyObject o=null;
mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).WhenCalled (y=>
{
o = y.Arguments[0] as MyObject;
}).Return (o);
which seemed like it might be promising but no luck. Posting it in case it jogs someone's memory...
This should do what you are looking for:
mock.Stub(x => x.DoSomething(null))
.IgnoreArguments()
.WhenCalled(x =>
{
x.ReturnValue = (MyObject) x.Arguments[0];
})
.Return(null)
.TentativeReturn();
Basically I'm using WhenCalled to override the default return value of null (which I've flagged as a tentative value) with the value of the parameter that was passed into DoSomething.
A simpler way:
var mock = MockRepository.GenerateStub<IFoo>();
mock.Expect(m => m.Bar())
.Return("Result goes here")
.Repeat.Any();
精彩评论