Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Rhino Mocks:如何模拟转换其输入的方法?_C#_.net_Rhino Mocks - Fatal编程技术网

C# Rhino Mocks:如何模拟转换其输入的方法?

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 =>

我有一个数据访问对象TransactionDao。当您调用TransactionDao.Save(transaction)时,我希望它设置一个transaction.IsSaved=true标志(这是一种简化,我尝试做的实际事情并不是那么平庸)。因此,当使用Rhinomock模拟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; }));

当然,如果您可以模拟事务,那么您应该模拟事务并使其返回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票赞成票。谢谢你,朋友。