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" doReturn
falhe.
Vejamos as assinaturas de método envolvidas aqui: ambos são static
métodos Matchers
. Ambos dizem que o Javadoc retornará null
, o que é um pouco difícil de entender. Presumivelmente, o Class
objeto passado quando o parâmetro é examinado, mas o resultado nunca é calculado ou descartado. Dado que isso null
pode representar qualquer classe e que você espera que o método zombado não seja chamado, as assinaturas isA( ... )
e any( ... )
apenas retornam, em null
vez 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?