2

Data Access Object TransactionDao があります。TransactionDao.Save(transaction) を呼び出すときに、 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; }));
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 に対して true を返すようにする必要があります。

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