web-dev-qa-db-fra.com

Quel est le but de Verifiable () dans Moq?

Quel est le but de Verifiable()?

Si je vérifie un Mock et laisse cela de côté, il vérifie toujours le SetUp.

Edit: J'utilisais VerifyAll() donc la raison pour laquelle tout était vérifié. Après être passé à Verify() seules mes .Verifiable()SetUp étaient vérifiées.

113
Castrohenge

ADDENDUM: Comme l'indique l'autre réponse, le but de .Verifiable Est d'enrôler un Setup dans un ensemble d'appels "différés Verify(...)" qui peuvent ensuite être déclenchés via mock.Verify().

La clarification du PO indique clairement que c'était le but et le seul problème était de comprendre pourquoi cela ne fonctionnait pas, mais comme l'a dit @Liam, la réponse devrait vraiment toucher à cela aussi: - Pour autant que je sache, les principaux cas d'utilisation sont:

  • maintien de la Sécheresse entre une mock.Setup() et mock.Verify
  • permettant de déconnecter la configuration d'une vérification de l'appel réel Verify lui-même (par exemple, vous pouvez le configurer dans une autre méthode d'assistance)

... et revenons à ma réponse, qui dit en termes simples: "soyez prudent, car les avantages ci-dessus sont généralement considérés comme contrebalancés par l'effet que la réalisation de ces objectifs a sur la lisibilité et la maintenabilité des tests qui s'appuient trop sur de telles constructions"

ORIGINAL: Notez que si possible, on devrait plutôt suivre la disposition AAA et donc on devrait être faire des appels explicites mock.Verify( expression ) une fois le travail terminé, plutôt qu'une mock.Setup( ... ).Verifiable() associée à une mock.Verify() ou mock.VerifyAll() dans la mesure du possible (crédit: @ kz ).

77
Ruben Bartelink

Lorsque la méthode Verify() est appelée à la fin du test, si aucune des attentes marquées comme vérifiables n'a été appelée, alors une exception est thrown.

VerifyAll() ne vérifie pas les attentes vérifiables.

46
Suvesh Pratapa