Rhino Mocks получает аргумент, изменяет его и возвращает? - PullRequest
37 голосов
/ 01 декабря 2011

Я пытаюсь написать что-то вроде этого:

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

Я хочу получить реальный объект, который был передан в mock, изменить его и вернуть обратно.Носорог издевается?

Ответы [ 2 ]

94 голосов
/ 01 декабря 2011

Вы можете использовать метод WhenCalled следующим образом:

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

и тогда вы можете создать свою заглушку следующим образом:

Invoice invoice = new Invoice { Id = 5 };
Invoice result = myStub.Create(invoice);
// at this stage result = invoice and invoice.Id = 100
0 голосов
/ 09 февраля 2019

Мне не нужно было добавлять IgnoreArguments (), чтобы избежать использования Return ().Это мой оригинальный метод:

List<myEntity> 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;   
                            });
...