繁体   English   中英

Rhino Mocks:如何模拟出可以转换其输入的方法?

[英]Rhino Mocks: How can I mock out a method that transforms its input?

我有一个数据访问对象TransactionDao。 当您调用TransactionDao.Save(transaction)时,我希望它设置一个transaction.IsSaved = true标志(这是一种简化,实际上我想做的事情并不是那么平庸)。 因此,当使用RhinoMocks模拟我的TransactionDao时,如何指示它应该转换其输入?

理想情况下,我想写这样的东西:

Expect.Call(delegate {dao.Save(transaction);}).Override(x => x.IsSaved=true);

有谁知道如何做到这一点?


尽管从实际类型签名下面指定的答案中我得到了提示,但您必须执行以下操作:由于Mark Ingram发表的内容似乎是最佳答案,尽管没有人明确说过,但这是做这个:

public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));

峡谷,

我发现,最简单的解决方案适用于您的问题:

Expect.Call(() => dao.Save(transaction))
    .Do(new Action<Transaction>(x => x.IsSaved = true));

因此,您无需创建特殊的委托人或其他任何东西。 只需使用标准.NET 3.5库中的Action。

希望对您有所帮助。 弗朗齐歇克

您可以使用Do回调完成此操作:

Expect.Call(delegate {dao.Save(transaction);})
    .Do(x => x.IsSaved = true);

如果可以模拟交易,则应该模拟交易并使IsSaved返回true。

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM