Comment effacer les précédentes attentes sur un objet?
Je tiens à mettre en place une valeur de retour
_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(true);
mais alors à un test spécifique, remplacer ce qui est attendu de fausse déclaration.
Quelque chose comme:
_stubRepository.ClearExpectations(); //<- this does not exist, I'm just making something up
_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(false);
Avis, je ne veux pas l'attente de fausse déclaration sur le second appel, je veux remplacer la première attente.
Cela permettrait de simplifier mes tests scénario considérablement.
Vous devez vous connecter pour publier un commentaire.
Il y a trois façons:
Vous pouvez réinitialiser les attentes en utilisant BackToRecord
Je dois avouer que je n'ai jamais vraiment utilisé parce qu'il est maladroit.
Edit: Maintenant je l'utilise parfois, c'est en fait la façon la plus propre. Il devrait y avoir une méthode d'extension (comme Stub), qui n'est elle - je pense qu'il a juste obtenu oublié. Je vous propose de rédiger votre propre.
Vous pouvez utiliser la Répétition.Tout()
Il des "pauses" de l'ordre de l'écrasé de définition et de "remplacement" des définitions précédentes. Mais c'est en quelque sorte implicite. Je l'utilise parfois, parce que c'est facile à écrire.
Vous pouvez créer une nouvelle maquette
Trivial, mais explicite et facile à comprendre. C'est seulement un problème si vous voulez garder beaucoup de définitions et de ne modifier que d'un seul appel.
AssertWasCalled
au lieu deExpect
etWhenCalled
au lieu deReturn
. Il y a aussi unTentativeReturn
, qui, je l'ai utilisée jusqu'à maintenant. Je devrais écrire un paragraphe sur la façon d'éviter le problème ...Pour ces situations, j'ai créé un simple RinoMocks de l'extension de la méthode afin de mieux montrer l'intention de talon et d'accroître la lisibilité.
Ainsi, au lieu d'un mystérieux appel comme celui-ci qui peut exiger un commentaire:
Vous pouvez obtenir un plus lisible test qui montre mieux l'intention de l' .Répétez.Tout() appelle:
public static IMethodOptions<T> OverridePrevious<T>(this IMethodOptions<T> options) { return options.Repeat.Any(); }
.Pour le bien de la communauté, je vais ajouter cette ajouter à Stefan de la liste des options ci-dessus:
Si la valeur de retour doit être changé fréquemment, je trouve ça propre et efficace à utiliser une fermeture comme suit.
L'expression lambda sera exécutée à chaque fois
Contains
est appelé et parce que nous avons créé une fermeture de référencementreturnValue
, il va toujours chercher le actuel valeur dereturnValue
.