Rhino Mocks:我如何模拟出一个转换输入的方法?

时间:2008-09-12 16:00:23

标签: c# .net rhino-mocks

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

3 个答案:

答案 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);