Sam Holder
Sam Holder

Reputation: 32936

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

Upvotes: 4

Views: 1873

Answers (2)

Alex Schearer
Alex Schearer

Reputation: 365

A simpler way:

var mock = MockRepository.GenerateStub<IFoo>();
mock.Expect(m => m.Bar())
    .Return("Result goes here")
    .Repeat.Any();

Upvotes: 1

Andrew Anderson
Andrew Anderson

Reputation: 3449

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.

Upvotes: 8

Related Questions