Quelqu'un peut-il s'il vous plaît me fournir un exemple montrant comment utiliser la org.mockito.ArgumentCaptor
classe et en quoi elle est différente des simples matchers fournis avec mockito.
J'ai lu les documents mockito fournis mais ceux-ci ne l'illustrent pas clairement, aucun d'entre eux n'est capable de l'expliquer avec clarté.
java
unit-testing
junit
mockito
Ujjwal
la source
la source
doSomething(data)
mutateinnerData
, alors ce changement sera-t-il présentassertEquals("Some inner data", actual.innerData)
ou sera-t-innerData
il capturé tel quel avantdoSomething
son exécution?OtherClass
est un simulacre, et comme il est défini maintenant,doSomething()
il ne fera rien, il enregistre simplement l'objet qui a été passé. Cela signifie qu'il sera capturé tel quel avantdoSomething
son exécution.verify
,times(1)
est la valeur par défaut et peut être omis.verify
méthode, elle utilise ces informations pour exécuter des correspondances avec la vérification que vous effectuez. Pour chaque paramètre, il demande s'il correspond à l'appel spécifique qu'il vérifie. Lorsque ArgumentCaptor est coché, il stocke simplement les valeurs avec lesquelles il a été appelé, donc à laverify
fin, il contient toutes les invocations pertinentes. C'est à peu près comment cela fonctionne. J'espère que ça aideLes deux principales différences sont:
ArgumentCaptor
peut capturer plus d'une fois.Pour illustrer ce dernier, disons que vous avez:
Ensuite, le capteur pourra vous donner accès aux 4 arguments, sur lesquels vous pourrez ensuite effectuer des assertions séparément.
Ceci ou n'importe quel nombre d'arguments en fait, puisque a
VerificationMode
n'est pas limité à un nombre fixe d'appels; dans tous les cas, le ravisseur vous donnera accès à tous, si vous le souhaitez.Cela présente également l'avantage que de tels tests sont (à mon humble avis) beaucoup plus faciles à écrire que d'avoir à implémenter vos propres
ArgumentMatcher
s - en particulier si vous combinez mockito avec assertj.Oh, et pensez à utiliser TestNG au lieu de JUnit.
la source
Les étapes pour effectuer un contrôle complet sont les suivantes:
Préparez le capteur:
Vérifiez que l'appel à dépendant du composant (collaborateur du sujet testé) times (1), est la valeur par défaut, il n'est donc pas nécessaire de l'ajouter.
Faire passer l'argument au collaborateur
someArgument peut être utilisé pour les assertions
la source
Ici, je vous donne un exemple approprié d'une méthode de rappel. supposons donc que nous ayons une méthode comme la méthode login ():
J'ai également mis toute la classe d'assistance ici pour rendre l'exemple plus clair: classe loginService
et nous avons l'auditeur LoginListener comme:
}
maintenant je voulais juste tester la méthode login () de la classe Login
n'oubliez pas non plus d'ajouter une annotation au-dessus de la classe de test comme
la source
captor
défini dans votre réponse?