web-dev-qa-db-fra.com

Comment savoir si un objet est une maquette Mockito?

Est-il possible de dire dans le code si un objet donné est une maquette Mockito ou non?

La raison pour laquelle j'aimerais le faire est de renvoyer un message d'erreur différent lorsqu'une maquette est utilisée. Cela serait utilisé pour suggérer aux autres développeurs qu'ils devraient utiliser une maquette pré-préparée qui est déjà définie pour répondre aux appels d'une manière utile plutôt que de créer la maquette eux-mêmes.

Pour le moment, le meilleur que j'ai est object.getClass().getName().contains("EnhancerByMockitoWithCGLIB") mais cela semble hacky.

62
mikej

Il semble qu'il n'y ait pas une telle API (veuillez soulever un problème, ça devrait l'être!) Heureusement (suite à votre commentaire ci-dessous), il y a une méthode dans le package org.mockito.internal.util:

import org.mockito.internal.util.MockUtil;

new MockUtil().isMock(obj)

Dans le futur, la méthode Mockito.isMock() pourrait être ajoutée à l'API publique, voir: problème 313: fournir isMock en dehors de org.mockito.internal) .

59
Tomasz Nurkiewicz

À titre de suivi, l'API publique Mockito a maintenant cette méthode:

MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect)

C'est le résultat du problème soulevé par @David Wallace. L'objet retourné prend en charge les méthodes "isMock ()" ainsi que "isSpy ()" et peut être amélioré ultérieurement pour fournir davantage d'informations liées à la simulation.

44
Spina