开发者

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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜