Rhino Prende In Giro:Come faccio a restituire I numeri da una sequenza di
-
09-06-2019 - |
Domanda
Ho un array Enumerabile
int meas[] = new double[] {3, 6, 9, 12, 15, 18};
Su ogni successiva chiamata al mock metodo che sto testando io voglio restituire un valore dall'array.
using(_mocks.Record()) {
Expect.Call(mocked_class.GetValue()).Return(meas);
}
using(_mocks.Playback()) {
foreach(var i in meas)
Assert.AreEqual(i, mocked_class.GetValue();
}
Qualcuno ha un'idea di come posso fare questo?
Soluzione
C'è sempre statico falso oggetto, ma questa domanda è su rhino-prende in giro, così mi presento con il modo in cui lo faccio.Il trucco è che si crea una variabile locale come il contatore, e utilizzare nel vostro delegato anonimo/lambda per tenere traccia di dove siete sulla matrice.Si noti che non ho gestire il caso che GetValue() viene chiamato più di 6 volte.
var meas = new int[] { 3, 6, 9, 12, 15, 18 };
using (mocks.Record())
{
int forMockMethod = 0;
SetupResult.For(mocked_class.GetValue()).Do(
new Func<int>(() => meas[forMockMethod++])
);
}
using(mocks.Playback())
{
foreach (var i in meas)
Assert.AreEqual(i, mocked_class.GetValue());
}
Altri suggerimenti
Se la funzionalità è la GetValue() restituisce ogni elemento di un array, in successione, allora si dovrebbe essere in grado di impostare più aspettative eg
using(_mocks.Record()) {
Expect.Call(mocked_class.GetValue()).Return(3);
Expect.Call(mocked_class.GetValue()).Return(6);
Expect.Call(mocked_class.GetValue()).Return(9);
Expect.Call(mocked_class.GetValue()).Return(12);
Expect.Call(mocked_class.GetValue()).Return(15);
Expect.Call(mocked_class.GetValue()).Return(18);
}
using(_mocks.Playback()) {
foreach(var i in meas)
Assert.AreEqual(i, mocked_class.GetValue();
}
Il mock repository si applicano le aspettative in ordine.
Qualsiasi motivo è necessario disporre di un mock qui...
Se non, vorrei andare per un falso classe..Molto più Semplice e io so come fare questo :)
Non so se mock quadri di fornire questo tipo di comportamento personalizzato.
IMHO, la resa di gestire questo.Link.
Qualcosa di simile a:
get_next() {
foreach( float x in meas ) {
yield x;
}
}