A resposta de Tomasz Nurkiewicz parece não contar toda a história!
NB Mockito versão: 1.10.19.
Eu sou muito novato no Mockito, então não posso explicar o seguinte comportamento: se houver um especialista por aí que possa melhorar essa resposta, sinta-se à vontade.
O método em questão aqui ,, NÃOgetContentStringValue é e NÃO . final static
Esta linha faz chamar o método original getContentStringValue:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Esta linha não chama o método original getContentStringValue:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Por razões que não posso responder, o uso isA()faz com que o comportamento pretendido (?) "Não chame método" doReturnfalhe.
Vejamos as assinaturas de método envolvidas aqui: ambos são staticmétodos Matchers. Ambos dizem que o Javadoc retornará null, o que é um pouco difícil de entender. Presumivelmente, o Classobjeto passado quando o parâmetro é examinado, mas o resultado nunca é calculado ou descartado. Dado que isso nullpode representar qualquer classe e que você espera que o método zombado não seja chamado, as assinaturas isA( ... )e any( ... )apenas retornam, em nullvez de um parâmetro genérico * <T>?
De qualquer forma:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
A documentação da API não fornece nenhuma pista sobre isso. Parece também dizer que a necessidade de tal comportamento "não chame método" é "muito rara". Pessoalmente, uso essa técnica o tempo todo : normalmente, acho que a zombaria envolve algumas linhas que "definem o cenário" ... seguidas chamando um método que "reproduz" a cena no contexto de simulação que você organizou. ... e enquanto você está montando o cenário e os acessórios, a última coisa que você quer é que os atores entrem no palco à esquerda e comecem a representar seus corações ...
Mas isso está muito além do meu salário ... Convido explicações de qualquer sumo sacerdote que passe por Mockito ...
* "parâmetro genérico" é o termo certo?