题
我有一个数据访问对象TransactionDao.当你呼叫TransactionDao.保存(交易),我想用它来设定一个交易。IsSaved=true标志(这是一个简化实际的东西,我正试图做的是不那么平庸).所以当时嘲笑我的TransactionDao与RhinoMocks我怎么可以表明,它应该改变其输入?
理想情况下,我想写的东西,像这样:
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; }));
解决方案
峡谷,
最简单的解决办法,我发现,应用于你的问题如下:
Expect.Call(() => dao.Save(transaction))
.Do(new Action<Transaction>(x => x.IsSaved = true));
所以你并不需要创建一个特别代表或其他任何东西。只是使用的行动是在标准。净3.5库。
希望这种帮助。Frantisek
其他提示
你可以完成这一使用不回调:
Expect.Call(delegate {dao.Save(transaction);})
.Do(x => x.IsSaved = true);
你应该笑的事务,并使其返回真正的fo IsSaved,如果你可以嘲笑交易的课程。
ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
不隶属于 StackOverflow