Depuis Java 8, vous pouvez utiliser la any
méthode sans argument et l'argument type sera déduit par le compilateur:
verify(bar).doStuff(any());
Explication
La nouveauté de Java 8 est que le type cible d'une expression sera utilisé pour déduire les paramètres de type de ses sous-expressions. Avant Java 8, seuls les arguments des méthodes étaient utilisés pour l'inférence de paramètres de type (la plupart du temps).
Dans ce cas, le type de paramètre doStuff
sera le type cible de any()
, et le type de valeur de retour any()
sera choisi pour correspondre à ce type d'argument.
Ce mécanisme a été ajouté dans Java 8 principalement pour pouvoir compiler des expressions lambda, mais il améliore généralement les inférences de type.
Types primitifs
Cela ne fonctionne pas avec les types primitifs, malheureusement:
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
Le problème est que le compilateur déduira Integer
la valeur de retour de any()
. Mockito n'en sera pas conscient (en raison de l'effacement des types) et renverra la valeur par défaut pour les types de référence, qui est null
. Le runtime tentera de décompresser la valeur de retour en appelant la intValue
méthode dessus avant de la passer à doStuff
, et l'exception sera levée.
any
méthode devrait simplement fonctionner. Vous ne cherchez pas de réponse pour des choses qui fonctionnent!any()
mais que ça allaitanyBoolean()
, ce que la dernière partie de votre réponse éclaire magnifiquement.Cela devrait fonctionner
la source
verify(bar).DoStuff(any[Array[Foo]])
Vous pouvez utiliser
Mockito.isA()
pour cela:http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class)
la source
Comme j'avais besoin d'utiliser cette fonctionnalité pour mon dernier projet (à un moment donné, nous avons mis à jour à partir de 1.10.19), juste pour tenir à jour les utilisateurs (qui utilisent déjà la version 2.1.0 ou supérieure de mockito-core ), le statique les méthodes des réponses ci-dessus doivent être prises en
ArgumentMatchers
classe:Veuillez garder cela à l'esprit si vous prévoyez de garder vos artefacts Mockito à jour car éventuellement à partir de la version 3, cette classe peut ne plus exister:
Selon 2.1.0 et supérieur, Javadoc de org.mockito.Matchers déclare:
J'ai écrit un petit article sur les jokers mockito si vous souhaitez en savoir plus.
la source