Mockito erreur avec la méthode qui retourne Option<T>
J'ai une interface avec la méthode suivante
public interface IRemoteStore {
<T> Optional<T> get(String cacheName, String key, String ... rest);
}
L'instance de la classe implémentant l'interface est appelée à remoteStore.
Quand je se moquer de ce avec mockito et d'utiliser la méthode lorsque:
Mockito.when(remoteStore.get("a", "b")).thenReturn("lol");
J'obtiens l'erreur:
Ne peut pas résolu la méthode 'thenReturn(java.lang.String)'
Je pensais que cela a à voir avec le fait que se retourne une instance de la classe Optionnelle j'ai donc essayé ceci:
Mockito.<Optional<String>>when(remoteStore.get("cache-name", "cache-key")).thenReturn
(Optional.of("lol"));
Mais, j'obtiens cette erreur:
quand (Facultatif '<'String'>') dans Mockito ne peut pas être appliqué à (Facultatif'< Objet>').
La seule fois où il a travaillé avec ceci:
String returnCacheValueString = "lol";
Optional<Object> returnCacheValue = Optional.of((Object) returnCacheValueString);
Mockito.<Optional<Object>>when(remotestore.get("cache-name", "cache-key")).thenReturn(returnCacheValue);
Mais au-dessus renvoie une instance de l'Option '< Objet> " et non pas Facultative '<'String'>.
Pourquoi ne pourrais-je pas simplement retourner une instance de l'Option '<'String'> " directement? Si je pouvais, comment dois-je faire?
Aussi pour info, ne pas confondre
java.util.Optional
avec com.google.common.base.Optional
, ce dernier doit être importé ici.OriginalL'auteur Yu Lin Chen | 2015-06-19
Vous devez vous connecter pour publier un commentaire.
Se moque de qui retour avez l'attente que le type de retour correspond à la moqué de l'objet type de retour.
Voici l'erreur:
"lol"
n'est pas unOptional<String>
, afin de ne pas l'accepter comme valide valeur de retour.La raison pour laquelle il a travaillé quand vous n'avez
est due à
returnCacheValue
être unOptional
.C'est facile à corriger: il suffit de le changer pour un
Optional.of("lol")
à la place.Vous pouvez également faire disparaître le type de témoins; le résultat ci-dessus seront déduites à
Optional<String>
.Je n'aurais pas su qu'à partir de la lecture de votre question.
Optional
est une classe de Google Goyave, un très populaire bibliothèque tierce, et il est compatible avec Java 7.OriginalL'auteur Makoto
Pas sûr pourquoi vous voyez des erreurs, mais cette compile/s'exécute sans erreur pour moi:
Expliquer pourquoi il fonctionne, c'est mieux que de dire qu'il n'. L'OP peut ne pas être la seule personne qui a ce problème; d'autres peuvent venir et avoir une question similaire dans l'avenir.
OriginalL'auteur Don Bottstein