J'utilise MOQ comme cadre ma moqueur et je dois tester une classe qui, lorsqu'un type d'exception spécifique est exécuté, il continuera à essayer jusqu'à ce que la situation soit résolue une fois que cela se produise les finitions d'exécution.
Alors ce dont j'ai besoin. est quelque chose de similaire à: p> merci pour toute aide que vous pouvez donner. p> p>
3 Réponses :
Ceci est un moyen, basé sur le MOQ QuickStart exemple de retour différent Valeurs sur chaque appel.
var myMock = new Mock<IFoo>();
bool firstTimeExecuteCalled = true;
myMock.Setup(m => m.Execute())
.Callback(() =>
{
if (firstTimeExecuteCalled)
{
firstTimeExecuteCalled = false;
throw new SpecificException();
}
});
try
{
myMock.Object.Execute();
}
catch (SpecificException)
{
// Would really want to call Assert.Throws instead of try..catch.
Console.WriteLine("Got exception");
}
myMock.Object.Execute();
Console.WriteLine("OK!");
Cela semble intéressant, mais si la méthode est annulée et que je ne reçois pas la méthode "retours" après la configuration? Et en fait, cela fonctionne si "getcountthththing" renvoie un int, il ne compilera pas s'il renvoie autre chose.
Quant à si ce n'est pas un INT, changez ce que vous retournez de la ligne code> renvoie code>. Il ne doit pas nécessairement être la valeur des appels code>.
Cette solution (plutôt compliquée) n'est plus nécessaire car le MOQ a pris en charge la méthode d'installation. Voir ma réponse ci-dessous pour un exemple
Pourquoi ne pas écrire votre propre objet de test qui fait cela? Si cela va être utilisé pour tester, c'est-à-dire quelque chose comme:
Dans ce cas, je pouvais voir ça. C'est un cas de bord, cependant; La plupart du temps, je veux soit un talon qui retournera des valeurs constantes connues ou une simule qui vérifiera qu'une méthode donnée a été appelée. MOQ facilite la création de deux personnes à la volée. De plus, si vous avez une interface héritée avec 30 membres et que vous n'avez besoin que d'un d'entre eux pour ce test, la solution MOQ est beaucoup plus courte.
https://github.com/moq/moq4/wiki/QuickStart#miscellais
Configuration d'un membre pour renvoyer différentes valeurs / lancez des exceptions sur des appels séquentiels: P>
var mock = new Mock<IFoo>(); mock.SetupSequence(f => f.GetCount()) .Returns(3) // will be returned on 1st invocation .Returns(2) // will be returned on 2nd invocation .Returns(1) // will be returned on 3rd invocation .Returns(0) // will be returned on 4th invocation .Throws(new InvalidOperationException()); // will be thrown on 5th invocation
C'était la réponse que je cherchais, je ne peux pas croire qu'il n'a pas plus de votes :)