Stubbing une méthode qui prend de la Classe<T> comme paramètre avec Mockito
Il y a une méthode générique qui prend une classe en paramètre et j'ai des problèmes cogner avec Mockito. La méthode ressemble à ceci:
public <U extends Enum<U> & Error, T extends ServiceResponse<U>> T validate(
Object target, Validator validator, Class<T> responseClass,
Class<U> errorEnum);
C'est dieu terrible, au moins pour moi... je ne pouvais imaginer la vie sans elle, mais le reste de la base de code utilise à elle...
J'allais, dans mon test de l'unité de stub de cette méthode retourne un nouvel objet vide. Mais comment puis-je faire cela avec mockito? J'ai essayé:
when(serviceValidatorStub.validate(
any(),
isA(UserCommentRequestValidator.class),
UserCommentResponse.class,
UserCommentError.class)
).thenReturn(new UserCommentResponse());
mais depuis que je suis le mélange et l'appariement de rapprochement et de valeurs brutes, j'obtiens un "org.mockito.des exceptions.en abuser.InvalidUseOfMatchersException: Invalid use de l'argument de rapprochement!"
Vous devez vous connecter pour publier un commentaire.
Le problème est, vous ne pouvez pas mélanger argument de rapprochement et de vrais arguments dans un moqué d'appel. Donc, plutôt ce faire:
Notez l'utilisation de la
eq()
argument matcher pour la mise en correspondance de l'égalité.voir: https://static.javadoc.io/org.mockito/mockito-core/1.10.19/org/mockito/Matchers.html#eq(T)
Aussi, vous pouvez utiliser le
same()
argument matcher pourClass<?>
types - cela correspond à une même identité, comme le==
Java opérateur.Juste pour compléter sur le même thread, si quelqu'un veut stubb, une méthode qui prend une Classe en tant qu'argument, mais ne se soucient pas de la nature, ou besoin de beaucoup de type d'être frappé de la même façon, voici une autre solution:
et ensuite appeler
Un gentil @Ash. J'ai utilisé votre classe générique comparateur de préparer ci-dessous.
Ceci peut être utilisé si nous voulons préparer la maquette d'un Type spécifique.(pas d'exemple)
Utilisation: