Rhino Mocks: Wie kann ich verspotten ein Verfahren, das seine Eingabe verwandelt?

StackOverflow https://stackoverflow.com/questions/59396

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe ein Objekt TransactionDao Data Access. Wenn Sie TransactionDao.Save (Transaktion) nennen würde ich es wie ein transaction.IsSaved = true-Flag-Einstellung (dies ist eine Vereinfachung der eigentliche Sache, die ich zu tun ist, ich versuche nicht ganz so banal). Also, wenn mein TransactionDao mit RhinoMocks spöttisch wie kann ich zeigen, dass es seine Eingabe verwandeln sollte?

Im Idealfall würde Ich mag so etwas schreiben:

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

Wer weiß, wie dies zu tun?


Obwohl ich ein Hinweis bekam, wie es aus der unter dem tatsächlichen Typ Signatur angegebenen Antwort zu tun ausgeschaltet ist, müssen Sie etwas tun: Aufgrund dessen, was Mark Ingram geschrieben, scheint die beste Antwort, obwohl niemand ausdrücklich gesagt, es ist, dies zu tun:

public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));
War es hilfreich?

Lösung

Schlucht,

Die einfachste Lösung, die ich gefunden, angewandt auf Ihre Frage ist folgende:

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

Sie brauchen also keine speziellen delegieren oder irgendetwas anderes erstellen müssen. verwenden Aktion nur die in Standard .NET 3.5 Bibliotheken ist.

Hoffe diese Hilfe. Frantisek

Andere Tipps

Sie können diesen mit dem Do Rückruf erreichen:

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

sollten Sie die Transaktion verspotten und es fo IsSaved return true machen, wenn Sie die Transaktion natürlich spotten kann.

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top