quand je lance mockito test se produit WrongTypeOfReturnValue Exception
Des détails 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, je fais appel when
sur updateItemAttributes
(qui n'a de retour d'un boolean
) et non pas sur updateItemAttributesByJuId
.
- Pourquoi est Mockito de tenter de renvoyer un
boolean
deupdateItemAttributesByJuId
? - Comment cela peut-il être corrigé?
- Résolu le mien avec cette réponse : stackoverflow.com/a/11520080/1579667
- Envisager de marquer la réponse comme acceptée si elle résolu votre problème. – Christian Garcia
Vous devez vous connecter pour publier un commentaire.
Selon https://groups.google.com/forum/?fromgroups#!topic/mockito/9WUvkhZUy90, vous devriez reformuler votre
à
@Repository
méthode DAO avec @Aspect. si je newhen(someDao.someMethod()).thenReturn(List<xxx>)
, j'ai eu ce WrongTypeOfReturnValue exception. Thru debug, je vois que lesomeMethod
méthode est en fait appelé dans la déclaration ci-dessus et déclenche la Autour de Conseils et retour d'unnull
mais Mockito, s'attend à unList<xxx>
.Autre raison pour laquelle le message d'erreur similaire est en train d'essayer de se moquer d'un
final
méthode. On ne devrait pas tenter de se moquer de finale de méthodes (voir Méthode finale moqueur).J'ai également confronté à l'erreur dans un programme multi-thread test. Réponse par gna travaillé dans ce cas.
Très intéressés à ce problème.
Dans mon cas, ce problème a été causé quand j'ai essayé de déboguer mes tests sur cette même ligne:
La remarque importante est que les tests étaient en cours d'exécution correctement sans débogage.
De toute manière, quand j'ai remplacé le code ci-dessus avec de l'extrait de code ci-dessous puis j'ai été en mesure de déboguer le problème de la ligne de sans problèmes.
J'ai récemment eu ce problème. Le problème est que la méthode que j'essayait de se moquer avait pas de modificateur d'accès. L'ajout d'publique résolu le problème.
Dans mon cas, le problème a été causé par essayer de se moquer d'une méthode statique et oublier d'appeler
mockStatic
sur la classe. Aussi j'ai oublié d'inclure la classe dans le@PrepareForTest()
J'ai eu ce message d'erreur parce que dans mon test, j'ai eu deux attentes, l'un sur une maquette et un sur le type de béton
Je l'ai corrigé en changeant cls une maquette ainsi
Si vous êtes à l'aide d'annotations, peut-être vous avez besoin d'utiliser @Maquette au lieu de @InjectMocks. Parce que @InjectMocks fonctionne comme @Spy et @Mock ensemble. Et @Spy garde la trace récemment signé des méthodes et vous pouvez sentir que des données incorrectes sont retournés/subbed.
@InjectMocks
fonctionne comme@Spy
et@Mock
ensemble." <- qui semble mauvais pour moi. Où avez-vous entendu cela?Pour moi, cela signifiait que j'étais l'exécution de cette:
Donc ce qui se passait, c'est que mockito était détection de
a.method2()
a appelé et m'a dit que je ne pouvais pas revenirc
dea.method2()
qui est faux.Correctif: l'utilisation de la
doReturn(c).when(b).method1(a)
la syntaxe de style (au lieu dewhen(b.method1(a)).thenReturn(c);
), ce qui vous permettra de découvrir le caché bug de façon plus concise et rapide.Ou dans ce cas particulier, après qu'il a commencé à montrer le plus précis "NotAMockException", et je l'ai changé à ne plus essayer de définir une valeur de retour à partir d'un non-objet fantaisie.
Erreur:
Code:
Solution pour résoudre ce problème:
1er Supprimer l'annotation “@Mock”.
2ème Ajouter
PowerMockito.mock
J'ai récemment rencontré ce problème tout en se moquant d'une fonction dans un Kotlin classe de données. Pour une raison inconnue, l'un de mes essais sont retrouvés dans un état congelé. Quand j'ai couru les tests à nouveau certains de mes tests, qui avait auparavant été a commencé à échouer avec le
WrongTypeOfReturnValue
exception.J'ai assuré, j'ai été en utilisant
org.mockito:mockito-inline
pour éviter les problèmes avec la finale de classes (mentionné par Arvidaa), mais le problème demeure. Ce que résolu pour moi était de tuer le processus et de le redémarrer Android Studio. Cette résilié mon congelés exécution de test et le test suivant s'exécute passé sans problèmes.C'est mon cas:
Puis, j'obtiens cette erreur:
Pouvez-vous deviner?
Le problème est que la Cible.method1() est une méthode statique. Mockito complètement me prévient à autre chose.
Manquant @MockBean sur le haricot que vous voulez pour se moquer de
Dans mon cas, j'ai été en utilisant à la fois
@RunWith(MockitoJUnitRunner.class)
etMockitoAnnotations.initMocks(this)
. Quand j'ai enlevéMockitoAnnotations.initMocks(this)
il a fonctionné correctement.