web-dev-qa-db-fra.com

Mockito pour int primitif

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.

23
user3278325

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 .

40
Jeff Bowman

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,

0
Ketan