ADDENDA: Comme les autres états de réponse, le but de .Verifiable
est d'engager un Setup
dans un ensemble de « différés » Verify(...)
appels qui peuvent alors être déclenchées par mock.Verify()
. La clarification de l'OP montre clairement que c'était le but et le seul problème était de comprendre pourquoi ça ne fonctionnait pas, mais comme @Liam poussé, la réponse devrait vraiment toucher à cela aussi: - L'utilisation de la clé cas pour autant que je peux voir sont:
- maintenant sec entre un
mock.Setup()
et mock.Verify
- permettant une déconnecter la configuration d'une vérification de l'appel
Verify
réel lui-même (par exemple, vous pouvez le configurer dans un autre méthode auxiliaire)
... et de nouveau à ma réponse, qui dit effectivement "attention car les avantages ci-dessus sont généralement considérés comme compensé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, il faut suivre plutôt la mise en page AAA et donc il faut être doing explicit mock.Verify(expression)
calls after the work has been done, rather than a mock.Setup(...).Verifiable()
paired with a mock.Verify()
or mock.VerifyAll()
autant que possible (crédit: @kzu).
Pour clarifier - Si j'ai besoin d'un simulacre pour retourner quelque chose au code sous test, est-ce un cas où 'Setup (...)' (dans ma section d'arrangement) et 'VerifyAll()' (dans mon assert section) serait approprié? –
@EricSmith En y repensant, ne pense pas que je le mets assez fort. Il y a énormément plus d'avantages à diviser votre travail en regroupement AAA que de surconcentration sur les points communs entre la phase Arrangement et Assertion. 90% du temps, il y a quelque chose à gagner des nuances de la façon dont vous exprimez les appels Verify à la fin, donc vous devriez prendre beaucoup de temps pour optimiser cela, même si dans certains cas, cela ressemble à une duplication douloureuse. L'un des points sur http://manning.com/osherove fait très bien, c'est que faire un test a du sens pour quelqu'un de sauter est essentiel, alors respectez la convention! –
Je ne suis normalement pas du genre à aller à l'encontre de la sagesse acceptée mais je ne suis pas encore convaincu des avantages de AAA par rapport à 'Verifyable()'/'VerifyAll()' dans tous les cas. Mon test d'unité actuel comporte un grand nombre d'appels 'Setup (...)' (> 30). Pourrait correspondre à chacun avec un équivalent Verify() pour satisfaire la convention, mais cela entraîne une grande quantité de duplication de code et sera plus difficile à maintenir et à lire à mesure que le nombre de tests unitaires augmente. Je suppose que ce que je demande vraiment est que des exceptions peuvent être faites s'il y a un grand nombre d'arrangements ou est-ce que l'évitement de 'Verifiable()' est une règle dure et rapide? –