ライノモック:入力を変換するメソッドをモックアウトするにはどうすればよいですか?
-
09-06-2019 - |
質問
データ アクセス オブジェクト 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; }));
解決
峡谷、
私が見つけた、あなたの質問に適用される最も簡単な解決策は次のとおりです。
Expect.Call(() => dao.Save(transaction))
.Do(new Action<Transaction>(x => x.IsSaved = true));
したがって、特別なデリゲートなどを作成する必要はありません。標準の .NET 3.5 ライブラリに含まれる Action を使用するだけです。
これがお役に立てば幸いです。フランティセク
他のヒント
これは、Do コールバックを使用して実現できます。
Expect.Call(delegate {dao.Save(transaction);})
.Do(x => x.IsSaved = true);
もちろんトランザクションをモックできる場合は、トランザクションをモックして IsSaved に対して true を返すようにする必要があります。
ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
所属していません StackOverflow