¡La respuesta de Tomasz Nurkiewicz parece no contar toda la historia!
NB Versión Mockito: 1.10.19.
Soy un Mockito newb, así que no puedo explicar el siguiente comportamiento: si hay un experto por ahí que pueda mejorar esta respuesta, por favor siéntase libre.
El método en cuestión aquí, NOgetContentStringValue
es y NO . final
static
Esta línea hace llamar el método original getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Esta línea no llama al método original getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Por razones que no puedo responder, el uso isA()
hace doReturn
que falle el comportamiento pretendido (?) De "no llamar al método" .
Veamos las firmas de métodos involucradas aquí: ambos son static
métodos de Matchers
. El Javadoc dice que ambos regresan null
, lo cual es un poco difícil de entender. Presumiblemente, el Class
objeto pasado mientras se examina el parámetro, pero el resultado nunca se calculó ni se descartó. Dado que null
puede representar cualquier clase y que espera que no se invoque el método simulado, ¿no podrían las firmas isA( ... )
y any( ... )
simplemente regresar en null
lugar de un parámetro genérico * <T>
?
De todas formas:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
La documentación de la API no da ninguna pista sobre esto. También parece decir que la necesidad de tal comportamiento de "no llamar método" es "muy rara". Personalmente, uso esta técnica todo el tiempo : normalmente encuentro que las burlas implican unas pocas líneas que "preparan la escena" ... seguido de un método que luego "reproduce" la escena en el contexto simulado que has puesto en escena ... .y mientras está configurando el escenario y los accesorios, lo último que desea es que los actores entren al escenario a la izquierda y comiencen a actuar con el corazón ...
Pero esto está más allá de mi calificación salarial ... Invito a explicaciones de cualquier sumo sacerdote Mockito que pase ...
* ¿es "parámetro genérico" el término correcto?