私はこのようなものを書こうとしています:
myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; });
モックに渡された実際のオブジェクトを取得し、それを変更して戻りたいのですが。
このシナリオはRhino Mocksで可能ですか?
次のように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
Return()の使用を避けるためにIgnoreArguments()を追加する必要はありませんでした。これは私の元の方法です:
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;
});