C# – Rhino Mocks receive argument, modify it and return

cnetrhino-mocks

I'm trying to write something like this:

myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; });

I want to get actual object that passed to mock, modify it and return back.

Is this scenario possible with Rhino Mocks?

Best Answer

You could use the WhenCalled method like this:

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;
    });

and then you can create your stub as such:

Invoice invoice = new Invoice { Id = 5 };
Invoice result = myStub.Create(invoice);
// at this stage result = invoice and invoice.Id = 100
Related Topic