2

我有一个数据访问对象 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; }));
4

3 回答 3

4

峡谷,

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

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

所以你不需要创建一个特殊的委托或其他任何东西。只需使用标准 .NET 3.5 库中的 Action 即可。

希望这有帮助。弗兰蒂塞克

于 2009-05-15T07:44:14.640 回答
1

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

Expect.Call(delegate {dao.Save(transaction);})
    .Do(x => x.IsSaved = true);
于 2008-09-12T16:23:44.323 回答
-1

如果您当然可以模拟交易,您应该模拟交易并使其返回真实的 IsSaved。

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
于 2008-09-12T16:16:41.267 回答