Dans le test, les arguments passés au simulacre dans les paramètres d'opération de méthode et la vérification d'appel de méthode peuvent différer des arguments réellement passés de la classe cible du test à la méthode simulée. À ce stade, en utilisant ArgumentMatcher, le contenu de l'argument peut être vérifié en douceur.
--Valider uniquement le type passé --Omettre la vérification des arguments qui ont été vérifiés dans d'autres cas de test --Spécifier les conditions détaillées
Il existe des utilisations telles que.
Par exemple, si vous souhaitez valider uniquement le type passé, vous pouvez utiliser la méthode ArgumentMatchers.any. Il est également utilisé pour ignorer la validation d'arguments qui ont déjà été validés dans d'autres cas de test.
Mockito.doNothing().when(display).display(ArgumentMatchers.any());
Mockito.verify(display, Mockito.times(1)).display(ArgumentMatchers.any());
Certains types de base et types de collection ont des méthodes correspondantes à l'avance, mais vous pouvez également les créer lors de la vérification du type de votre propre classe.
Mockito.doNothing().when(display).display(ArgumentMatchers.anyString());
Mockito.verify(display, Mockito.times(1)).display(ArgumentMatchers.any(String.class));
--Créez une classe d'implémentation pour l'interface ArgumentMatcher. À ce stade, la méthode matches est remplacée.
ArgumentMatcher<String> matcher = argument -> {
assertThat(argument.substring(1), is(msg));
return true;
};
Mockito.doNothing().when(display).display(Mockito.argThat(matcher));
Mockito.verify(display, Mockito.times(1)).display(Mockito.argThat(matcher));
La formule lambda est utilisée dans la formule ci-dessus. L'expression lambda est une autre omission de la description par la classe anonyme.
Le remplacement de la méthode matches d'ArgumentMatcher est écrit à l'aide d'une classe anonyme comme suit.
ArgumentMatcher<String> matcher = new ArgumentMatcher(
@Override
public boolean matches(Object argument) {
assertThat(argument.substring(1), is(msg));
return true;
}
)
En utilisant l'équation lambda, vous pouvez:
--Omettre nouveau (car les expressions lambda créent toujours une instance) --Omit ArgumentMatcher (Ici, il est évident que vous voulez passer au matcher la classe d'implémentation d'ArgumentMatcher. Peut-être que la déclaration de type de variable fonctionne ici) -Omit @Override, matches (L'interface ArgumentMatcher n'a qu'une seule méthode. Les deux sont évidents car nous créons une classe d'implémentation pour cela.)
Pour la pratique, écrivons à nouveau la définition d'ArgumentMatcher.
ArgumentMatcher<String> matcher = argument -> {
assertThat(argument.substring(1), is(msg));
return true;
};
Bon travail.
Recommended Posts