2012-01-27 12 views
47

¿Es posible indicar en el código si un objeto dado es un simulacro de Mockito o no?¿Cómo puedo saber si un objeto es un simulacro de Mockito?

La razón por la que me gustaría hacer esto es devolver un mensaje de error diferente cuando se usa una simulación. Esto se usaría para sugerir a otros desarrolladores que deberían usar un simulacro pre-preparado que ya está configurado para responder a las llamadas de una manera útil en lugar de crear el simulacro ellos mismos.

Por el momento, lo mejor que tengo es object.getClass().getName().contains("EnhancerByMockitoWithCGLIB") pero esto me parece hacky.

Respuesta

45

Parece que no hay tal API (por favor plantear un problema, que debe ser!) Afortunadamente (siguiendo tu comentario más abajo) no es un método en el paquete org.mockito.internal.util:

import org.mockito.internal.util.MockUtil; 

new MockUtil().isMock(obj) 

En el futuro método Mockito.isMock() podría agregarse a la API pública, consulte: Issue 313: Provide isMock outside of org.mockito.internal).

+3

A raíz de su respuesta eché un vistazo a la [fuente de MockUtil] (https://fisheye2.atlassian.com/browse/mockito/trunk/src/org/mockito/internal/util/MockUtil.java? r = 2020) y directamente bajo el método privado 'isMockitoMock' hay un método público' isMock' que parece puede usarse. Publicaré en la lista de correo de Mockito para verificar si es una buena idea llamar a métodos de 'org.mockito.internal.util'. – mikej

+0

Una de las intenciones del paquete 'org.mockito.internal.util' es que el equipo de Mockito podría cambiar cualquier cosa en este paquete, en una versión más nueva. Entonces, si usa este paquete, es posible que sus pruebas se rompan en el futuro. Sin embargo, es muy poco probable que nos deshagamos de este método en particular, por lo que diría que es bastante seguro de usar. –

+0

@mikej: +1, de alguna manera me perdí esa, ¡gracias! Eliminé la respuesta anterior y puse su sugerencia en su lugar para que se destaque mejor. Espero que no te importe. –

32

Como seguimiento, la API pública Mockito ahora tiene este método:

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

que es el resultado de la cuestión que planteó @ David Wallace. El objeto devuelto admite los métodos 'isMock()' y 'isSpy()' y puede mejorarse posteriormente para proporcionar más información simulada.

Cuestiones relacionadas