C# Rhino Mock接收参数,修改并返回?

C# Rhino Mock接收参数,修改并返回?,c#,.net,rhino-mocks,C#,.net,Rhino Mocks,我试着写这样的东西: myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; }); myStub .Stub(_ => _.Create(Arg<Invoice>.Is.Anything)) .Return(null) // will be ignored but still the API requires

我试着写这样的东西:

myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; });
myStub
    .Stub(_ => _.Create(Arg<Invoice>.Is.Anything))
    .Return(null) // will be ignored but still the API requires it
    .WhenCalled(_ => 
    {
        var invoice = (Invoice)_.Arguments[0];
        invoice.Id = 100;
        _.ReturnValue = invoice;
    });
myStub.Stub(=>.Create(Arg.It.Anything)).Callback(i=>{i.Id=100;返回i;});
我想得到传递给mock的实际对象,修改它并返回


Rhino Mock是否可能出现这种情况?

您可以在调用时使用以下
方法:

myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; });
myStub
    .Stub(_ => _.Create(Arg<Invoice>.Is.Anything))
    .Return(null) // will be ignored but still the API requires it
    .WhenCalled(_ => 
    {
        var invoice = (Invoice)_.Arguments[0];
        invoice.Id = 100;
        _.ReturnValue = invoice;
    });

我不需要添加IgnoreArguments()来避免使用Return()。 这是我最初的方法:

List<myEntity> GetDataByRange(int pageSize, int offsetRecords);
列出GetDataByRange(int pageSize,int offsetRecords);
以下是我的模拟示例:

_Repository.Stub(x => x.GetDataByRange(Arg<int>.Is.Anything, Arg<int>.Is.Anything))
           .WhenCalled(x => {
                              var mylist = entitiesList?.Skip((int)x.Arguments[1])?
                                                  .Take((int)x.Arguments[0])?.ToList();
                              x.ReturnValue = mylist;   
                            });
\u Repository.Stub(x=>x.GetDataByRange(Arg.Is.Anything,Arg.Is.Anything))
.何时调用(x=>{
var mylist=entitiesList?.Skip((int)x.Arguments[1])?
.Take((int)x.Arguments[0])?.ToList();
x、 ReturnValue=mylist;
});

我认为,通过在末尾添加IgnoreArguments(),可以避免调用Return()。@samjudson:Rhino仍然会抛出一个异常,即使带有IgnoreArguments,也不会返回,因此需要返回。是的,Rhino Mocks 4.0.0+似乎不需要在调用
.WhenCalled()
之前调用
。但它只适用于方法存根。如果我们存根索引器,它仍然需要在
.whencall()
之前使用
.Return()