我有一个数据访问对象TransactionDao。当你调用TransactionDao.Save(事务)时,我想让它设置一个transaction.IsSaved = true标志(这是一个简化我实际想做的事情并不是那么平庸)。因此,当使用RhinoMocks模拟我的TransactionDao时,我如何指示它应该转换它的输入?
理想情况下,我想写这样的东西:
Expect.Call(delegate {dao.Save(transaction);}).Override(x => x.IsSaved=true);
有谁知道怎么做?
虽然我从下面指定的答案中得到了一个提示,但实际的类型签名是关闭的,你必须做这样的事情: 由于马克·英格拉姆发布的内容,似乎是最好的答案,尽管没有人明确表示,但是这样做是:
public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));
答案 0 :(得分:4)
Gorge,
我发现的最简单的解决方案适用于您的问题如下:
Expect.Call(() => dao.Save(transaction))
.Do(new Action<Transaction>(x => x.IsSaved = true));
因此您无需创建特殊委托或其他任何内容。只需使用标准.NET 3.5库中的Action。
希望这有帮助。 弗兰蒂谢克
答案 1 :(得分:1)
您可以使用Do回调来完成此操作:
Expect.Call(delegate {dao.Save(transaction);})
.Do(x => x.IsSaved = true);
答案 2 :(得分:-1)
如果您可以模拟交易,那么您应该模拟交易并使其返回IsSaved真实。
ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);