Si j'utilise une variable de type classe Wrapper comme argument, le scénario de test Mockito est accepté, mais Comment écrire le scénario de test Mockito pour la variable de type primitive int, qui est un argument d'une méthode dans ServiceImpl.
Vous pouvez avoir des problèmes avec any
ou argThat
pour les arguments de type primitif à when
et verify
. Ces méthodes centrées sur les objets fonctionnent correctement avec les effets secondaires, mais elles ont tendance à renvoyer null
pour une valeur de retour fictive, ce qui ne fonctionne pas pour les primitives de décompression Java via l'auto-boxing.
Heureusement, la classe org.mockito.ArgumentMatchers
possède un ensemble complet de méthodes centrées sur les primitives (dont j'ai répertorié ici les méthodes int
):
static int anyInt()
static int eq(int value)
static int intThat(org.hamcrest.ArgumentMatcher<Java.lang.Integer> matcher)
Voyez-les tous dans la documentation de la classe ArgumentMatchers .
Je sais que la question date de plus de 4 ans et 8 mois, mais par souci de solution claire à partir de aujourd'hui, je publie cette page.
Dans mon cas, la signature de la méthode à tester est
public SomeObject create(String code, int status)
de sorte que le code de test pour vérifier les valeurs d'argument lorsque la méthode a été invoquée serait le suivant
verify(this.service).create(
argThat(code -> "dummy_code".equals(code)),
intThat(status -> status == 105));
Si je vais avec le argThat même pour int (ou tout type primitif), alors mockito jette NPE
J'utilise actuellement org.mockito: mockito-core: jar: 2.15.0 qui doit avoir été avancé compte tenu du moment où la question a été posée! Mais en pensant que cela pourrait être utile aux gens ... Merci,