C# Rhino Mocks:如何模拟转换其输入的方法?
我有一个数据访问对象TransactionDao。当您调用TransactionDao.Save(transaction)时,我希望它设置一个transaction.IsSaved=true标志(这是一种简化,我尝试做的实际事情并不是那么平庸)。因此,当使用Rhinomock模拟TransactionDao时,我如何指示它应该转换其输入 理想情况下,我想写这样的东西:C# Rhino Mocks:如何模拟转换其输入的方法?,c#,.net,rhino-mocks,C#,.net,Rhino Mocks,我有一个数据访问对象TransactionDao。当您调用TransactionDao.Save(transaction)时,我希望它设置一个transaction.IsSaved=true标志(这是一种简化,我尝试做的实际事情并不是那么平庸)。因此,当使用Rhinomock模拟TransactionDao时,我如何指示它应该转换其输入 理想情况下,我想写这样的东西: Expect.Call(delegate {dao.Save(transaction);}).Override(x =>
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; }));
当然,如果您可以模拟事务,那么您应该模拟事务并使其返回true for IsSaved
ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
ITransaction事务=\u Mocker.dynamicMock;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
保存(事务);
您可以使用Do回调完成此操作:
Expect.Call(delegate {dao.Save(transaction);})
.Do(x => x.IsSaved = true);
峡谷
我发现适用于你的问题的最简单解决方案如下:
Expect.Call(() => dao.Save(transaction))
.Do(new Action<Transaction>(x => x.IsSaved = true));
Expect.Call(()=>dao.Save(事务))
.Do(新操作(x=>x.IsSaved=true));
因此,您不需要创建特殊委托或其他任何内容。只需使用标准.NET3.5库中的操作即可
希望这有帮助。
Frantisek正如我所说,这是对我所做工作的简化,在参数和其他可以设置的标志中还有其他变化。我需要知道如何使用byreference参数BasicallyTank you,虽然语法不完全正确,但它给了我一个无法将lambda转换为委托的错误,一旦我弄清楚确切的语法,我将发布它并标记您的答案。George,因为Expect.Call(…).Do answer是正确的(只有语法错误),我希望我的答案能获得1票赞成票。谢谢你,朋友。