Na documentação do Mockito e javadocs, ele diz
É recomendável usar o ArgumentCaptor com verificação, mas não com stub.
mas não entendo como o ArgumentCaptor pode ser usado para stub. Alguém pode explicar a declaração acima e mostrar como o ArgumentCaptor pode ser usado para stubbing ou fornecer um link que mostra como isso pode ser feito?
java
unit-testing
junit
mockito
Não posso dizer
fonte
fonte
Respostas:
Assumindo o seguinte método para testar:
A documentação do Mockito diz que você não deve usar o captor desta maneira:
Porque você pode apenas usar o matcher durante o stub:
Mas a verificação é uma história diferente. Se seu teste precisar garantir que esse método foi chamado com um argumento específico, use
ArgumentCaptor
e este é o caso para o qual foi projetado:fonte
false
, não étrue
.A linha
faria o mesmo que
Portanto, usar o argumentoCaptor.capture () quando o stubbing não tem valor agregado. O uso de Matchers.any () mostra melhor o que realmente acontece e, portanto, é melhor para facilitar a leitura. Com argumentCaptor.capture (), você não pode ler quais argumentos são realmente correspondidos. E, em vez de usar any (), você pode usar correspondências mais específicas quando tiver mais informações (classe do argumento esperado), para melhorar seu teste.
E outro problema: se você usar o argumentoCaptor.capture () ao fazer stub, fica claro quantos valores você deve esperar que sejam capturados após a verificação. Queremos capturar um valor durante a verificação, não durante o stub, porque nesse momento ainda não há valor para capturar. Então, o que os captores de argumento capturam a captura do método durante o stub? ou não captura nada? Eu não tenho a resposta para esta pergunta. Considero um comportamento indefinido e não quero usar um comportamento indefinido.
fonte
Hipoteticamente, se a pesquisa o levou a essa pergunta, provavelmente você deseja o seguinte:
Por quê? Porque, como eu, você valoriza o tempo e não implementará
.equals
apenas por uma questão de cenário de teste único.E 99% dos testes desmoronam com retorno nulo da Mock e, em um design razoável, você evita o retorno
null
a todo custo, usaOptional
ou muda para o Kotlin. Isso implica queverify
não precisa ser usado com freqüência e os ArgumentCaptors são muito entediantes para escrever.fonte