Domanda

Ho un oggetto di accesso ai dati TransactionDao.Quando chiami TransactionDao.Save(transaction) vorrei che impostasse un flag Transaction.IsSaved=true (questa è una semplificazione, la cosa che sto cercando di fare non è così banale).Quindi, quando derido il mio TransactionDao con RhinoMocks, come posso indicare che dovrebbe trasformare il suo input?

Idealmente vorrei scrivere qualcosa del genere:

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

Qualcuno sa come fare questo?


Anche se ho ricevuto un suggerimento su come farlo dalla risposta specificata di seguito, la firma del tipo effettivo è disattivata, devi fare qualcosa del genere:A causa di ciò che ha pubblicato Mark Ingram, sembra che la risposta migliore, anche se nessuno lo abbia detto esplicitamente, è fare questa:

public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));
È stato utile?

Soluzione

Gola,

La soluzione più semplice, che ho trovato, applicata alla tua domanda è la seguente:

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

Quindi non è necessario creare un delegato speciale o altro.Basta usare Action che si trova nelle librerie .NET 3.5 standard.

Spero che questo aiuto.František

Altri suggerimenti

Puoi ottenere questo risultato utilizzando il callback Do:

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

dovresti deridere la transazione e farla restituire true per IsSaved, se puoi ovviamente deridere la transazione.

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top