2008-09-12 11 views
2

私はデータアクセスオブジェクトTransactionDaoを持っています。 TransactionDao.Save(トランザクション)を呼び出すと、transaction.IsSaved = trueフラグを設定することができます(これは単純化していますが、実際にやろうとしていることはそれほど珍しいことではありません)。だから、私のTransactionDaoをRhinoMockで嘲笑うときに、その入力を変換する必要があることをどのように示すことができますか?Rhino Mocks:入力を変換するメソッドをモックアウトするにはどうすればよいですか?

理想的には私はこのような何かを書きたいと思います:

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; })); 

答えて

4

渓谷、

最も簡単な解決策は、あなたの質問に適用以下の通りです:

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

特別なデリゲートなどを作成する必要はありません。標準の.NET 3.5ライブラリにあるActionを使用してください。

このヘルプが必要です。 Frantisek

-1

あなたが取引を模擬し、あなたはもちろんのトランザクションを模擬することができれば、それは、IsSaved foはtrueを返し行う必要があります。あなたがコールバックを使用してこれを実現することができます

ITransaction transaction = _Mocker.dynamicMock<ITransaction>; 
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true); 
_mocker.ReplayAll(); 
dao.Save(transaction); 
+0

私が言ったように、これは私がやっていることを単純化したもので、パラメータや他のフラグを設定することができます。私は基本的にbyreferenceパラメータで作業する方法を知る必要があります –

1

:私が見つけ

Expect.Call(delegate {dao.Save(transaction);}) 
    .Do(x => x.IsSaved = true); 
+0

構文が正確ではありませんが、ありがとう、ありがとう、構文は正確ではありません、それを与える私はラムダを代理エラーに変換することはできません。回答。 –

+0

ジョージ、Expect.Call(...)以来、答えは正しかったです(構文エラーのみ)、私は私の答えを1つの投票に感謝します。 ありがとうございました。 –

関連する問題