Détail de l'erreur:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
Boolean cannot be returned by updateItemAttributesByJuId()
updateItemAttributesByJuId() should return ResultRich
This exception might occur in wrongly written multi-threaded tests.
Please refer to Mockito FAQ on limitations of concurrency testing.
mon code:
@InjectMocks
protected ItemArrangeManager arrangeManagerSpy = spy(new ItemArrangeManagerImpl());
@Mock
protected JuItemWriteService juItemWriteService;
when(arrangeManagerSpy
.updateItemAttributes(mapCaptor.capture(), eq(juId), eq(itemTO.getSellerId())))
.thenReturn(false);
Comme vous pouvez le voir, j'appelle when
sur updateItemAttributes
(ce qui renvoie a boolean
) pas sur updateItemAttributesByJuId
.
- Pourquoi Mockito tente-t-il de renvoyer un
boolean
deupdateItemAttributesByJuId
? - Comment cela peut-il être rectifié?
@Repository
méthode Spring DAO avec @Aspect . si je le faiswhen(someDao.someMethod()).thenReturn(List<xxx>)
, j'ai cette exception WrongTypeOfReturnValue. Grâce au débogage, je peux voir que lasomeMethod
méthode est en fait appelée dans l'instruction ci-dessus et déclenche le conseil Around et renvoie unnull
mais Mockito attend unList<xxx>
.Une autre raison pour un message d'erreur similaire est d'essayer de se moquer d'une
final
méthode. Il ne faut pas essayer de se moquer des méthodes finales (voir Moquages de la méthode finale ).J'ai également confronté l'erreur dans un test multi-thread. Réponse de gna a fonctionné dans ce cas.
la source
Problème très intéressant. Dans mon cas, ce problème a été causé lorsque j'ai essayé de déboguer mes tests sur cette ligne similaire:
La remarque importante est que les tests s'exécutaient correctement sans débogage.
De toute façon, lorsque j'ai remplacé le code ci-dessus par l'extrait de code ci-dessous, j'ai pu déboguer la ligne de problème sans problème.
la source
Pour moi, cela signifiait que je dirigeais ceci:
Donc, ce qui se passait, c'est que mockito détectait qui
a.method2()
était appelé, et me disait que je ne pouvais pas revenirc
dea.method2()
ce qui était faux.Correction: utilisez la
doReturn(c).when(b).method1(a)
syntaxe de style (au lieu dewhen(b.method1(a)).thenReturn(c);
), qui vous aidera à découvrir le bogue caché de manière plus concise et plus rapide.Ou dans ce cas particulier, après avoir fait cela, il a commencé à afficher le "NotAMockException" plus précis, et je l'ai changé pour ne plus essayer de définir une valeur de retour à partir d'un objet non simulé.
la source
J'ai récemment eu ce problème. Le problème était que la méthode que j'essayais de simuler n'avait pas de modificateur d'accès. L'ajout de public a résolu le problème.
la source
J'ai eu cette erreur car dans mon test j'avais deux attentes, une sur une maquette et une sur le type de béton
Je l'ai corrigé en changeant les cls pour être également un simulacre
la source
Dans mon cas, le problème a été causé en essayant de se moquer d'une méthode statique et en oubliant d'appeler
mockStatic
la classe. J'ai également oublié d'inclure la classe dans le@PrepareForTest()
la source
Si vous utilisez des annotations, vous devrez peut-être utiliser @Mock au lieu de @InjectMocks. Parce que @InjectMocks fonctionne ensemble comme @Spy et @Mock. Et @Spy garde une trace des méthodes récemment exécutées et vous pouvez avoir l'impression que des données incorrectes sont renvoyées / sous-titrées.
la source
@InjectMocks
fonctionne comme@Spy
et@Mock
ensemble." <- cela me semble faux. D'où avez-vous entendu cela?Dans mon cas, j'utilisais à la fois
@RunWith(MockitoJUnitRunner.class)
etMockitoAnnotations.initMocks(this)
. Quand j'ai enlevéMockitoAnnotations.initMocks(this)
cela a fonctionné correctement.la source
Dans mon cas, le bean a été initialisé en utilisant l' annotation @Autowired au lieu de @MockBean
Donc, de cette façon, la moquerie des DAO et des services lève une telle exception
la source
Erreur:
Code réel:
Solution pour résoudre ce problème:
1er Supprimer l'annotation «@Mock».
2e ajout
PowerMockito.mock
la source
J'ai récemment rencontré ce problème en se moquant d'une fonction dans une classe de données Kotlin . Pour une raison inconnue, l'un de mes tests s'est terminé dans un état figé. Lorsque j'ai réexécuté les tests, certains de mes tests qui avaient déjà réussi ont commencé à échouer avec l'
WrongTypeOfReturnValue
exception.Je me suis assuré que j'utilisais
org.mockito:mockito-inline
pour éviter les problèmes avec les classes finales (mentionnés par Arvidaa), mais le problème est resté. Ce qui a résolu le problème pour moi, c'est d' arrêter le processus et de redémarrer Android Studio . Cela a mis fin à mon test gelé et les tests suivants ont réussi sans problème.la source
@MockBean manquant sur le haricot dont vous voulez vous moquer
la source
J'ai eu ce problème
WrongTypeOfReturnValue
parce que je me suis moqué d'une méthode renvoyant unjava.util.Optional;
avec uncom.google.common.base.Optional;
dû à mon formateur ajoutant automatiquement les importations manquantes.Mockito me disait juste que "méthode quelque chose () devrait retourner facultatif" ...
la source
Pour moi, le problème était les tests multithreads qui faisaient du stubbing / vérification sur une maquette partagée. Cela a conduit à lancer une
WrongTypeOfReturnValue
exception au hasard .Ce test n'est pas correctement rédigé avec Mockito. Les mocks ne doivent pas être accessibles à partir de plusieurs threads.
La solution était de faire des simulations locales à chaque test.
la source
TL; DR Si certains arguments de votre test le sont
null
, veillez à simuler l'appel de paramètre avecisNull()
au lieu deanyXXX()
.J'ai eu cette erreur lors de la mise à niveau de Spring Boot 1.5.x vers 2.1.x. Spring boot est livré avec son propre Mockito, qui est maintenant également mis à niveau vers 2.x (voir par exemple Dépendances de Spring boot 2.1.2 )
Mockito a changé le comportement de la
anyXXX()
méthode, oùXXX
estString
,Long
etc. Voici les JavadocanyLong()
:Je vous suggère de déboguer au point où votre maquette est sur le point d'être appelée et d'inspecter, si au moins un argument l'est
null
. Dans ce cas, assurez-vous que vous préparez votre maquette avecisNull()
au lieu de par exempleanyLong()
.Donc ça:
devient:
la source
C'est mon cas:
Ensuite, j'obtiens cette erreur:
Peux-tu deviner?
Le problème est que Target.method1 () est une méthode statique. Mockito me prévient complètement d'une autre chose.
la source