Question

J'ai un tableau Enumerable

int meas[] = new double[] {3, 6, 9, 12, 15, 18};

À chaque appel successif de la méthode fictive que je teste, je souhaite renvoyer une valeur de ce tableau.

using(_mocks.Record()) {
  Expect.Call(mocked_class.GetValue()).Return(meas); 
}
using(_mocks.Playback()) {
  foreach(var i in meas)
    Assert.AreEqual(i, mocked_class.GetValue();    
}

Quelqu'un at-il une idée de la façon dont je peux y arriver?

Était-ce utile?

La solution

Il y a toujours un faux objet statique, mais cette question concerne les rhinocéros, alors je vous présente la façon dont je vais le faire. L'astuce consiste à créer une variable locale en tant que compteur et à l'utiliser dans votre délégué anonyme / lambda pour garder une trace de votre position dans le tableau. Notez que je n’ai pas traité le cas où GetValue () a été appelé plus de 6 fois.

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());
}

Autres conseils

Si la fonctionnalité est GetValue () renvoie chaque élément du tableau successivement, vous devriez pouvoir configurer plusieurs attentes, par exemple,

.
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();    
}

Le référentiel factice appliquera les attentes dans l'ordre.

N'importe quelle raison pour laquelle vous devez vous moquer ici ...
Sinon, je choisirais un faux cours. Beaucoup plus simple et je sais comment l'obtenir :) Je ne sais pas si les frameworks factices fournissent ce type de comportement personnalisé.

IMHO, le rendement gérera cela. Lien .

Quelque chose comme:

get_next() {
  foreach( float x in meas ) {
    yield x;
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top