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?

È stato utile?

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;
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top