我可以设置一个模拟来始终返回其中一个参数中给出的对象吗?

时间:2010-07-21 11:51:46

标签: rhino-mocks

我可以设置一个模拟对象来始终返回作为参数给出的对象吗?我有一个方法

public MyObject DoSomething(MyObject obj)

我希望有一个模拟,它总是为每次调用DoSomething返回obj,有点像这样:

mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).Return(Arg<MyObject>)

虽然我不确定在返回位中放什么......

编辑:我试过这个:

 MyObject o=null;
 mock.Stub(x=>x.DoSomething(Arg<MyObject>.Is.Anything).WhenCalled (y=>
 {
    o = y.Arguments[0] as MyObject;
 }).Return (o);
似乎它可能很有希望,但没有运气。张贴它以防它慢慢某人的记忆...

2 个答案:

答案 0 :(得分:7)

这应该可以满足您的需求:

mock.Stub(x => x.DoSomething(null))
    .IgnoreArguments()
    .WhenCalled(x =>
                    {
                        x.ReturnValue = (MyObject) x.Arguments[0];   
                    })
    .Return(null)
    .TentativeReturn();

基本上我正在使用WhenCalled来覆盖null的默认返回值(我将其标记为暂定值),并将参数值传递给DoSomething。

答案 1 :(得分:1)

更简单的方法:

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