Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I set up a mock to always return the object given in one of the arguments?

Tags:

rhino-mocks

Can I set up a mock object to always return the object given as a parameter? I have a method

public MyObject 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...

like image 254
Sam Holder Avatar asked Jan 22 '23 17:01

Sam Holder


1 Answers

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.

like image 88
Andrew Anderson Avatar answered Apr 30 '23 02:04

Andrew Anderson