Alguém pode me fornecer um exemplo mostrando como usar a org.mockito.ArgumentCaptor
classe e como ela é diferente dos pares simples fornecidos com o mockito.
Eu li os documentos mockito fornecidos, mas esses não o ilustram claramente, nenhum deles é capaz de explicá-lo com clareza.
java
unit-testing
junit
mockito
Ujjwal
fonte
fonte
doSomething(data)
mutaçãoinnerData
, essa alteração estará presenteassertEquals("Some inner data", actual.innerData)
ou seráinnerData
capturada como está antes dedoSomething
ser executada?OtherClass
é uma farsa e, como está definido agora,doSomething()
ele não fará nada, simplesmente registra o objeto que foi passado. Isso significa que ele será capturado como está antes dedoSomething
ser executado.verify
,times(1)
é o padrão e pode ser omitido.verify
método, ele usa essas informações para executar correspondências na verificação que você está fazendo. Para cada parâmetro, ele pergunta se corresponde à chamada específica que verifica. Quando o ArgumentCaptor está marcado, ele simplesmente armazena os valores com os quais foi chamado e, quandoverify
termina, mantém todas as chamadas relevantes. É mais ou menos assim que funciona. Espero que ajudeAs duas principais diferenças são:
ArgumentCaptor
pode capturar mais de uma vez.Para ilustrar o último, diga que você tem:
Em seguida, o captador poderá fornecer acesso a todos os 4 argumentos, nos quais você poderá executar asserções separadamente.
Este ou qualquer número de argumentos, de fato, uma vez que a
VerificationMode
não se limita a um número fixo de invocações; de qualquer forma, o seqüestrador lhe dará acesso a todos eles, se desejar.Isso também tem o benefício de que esses testes são (mais) muito mais fáceis de escrever do que ter que implementar seus próprios
ArgumentMatcher
s - principalmente se você combinar mockito com assertj.Ah, e considere usar o TestNG em vez do JUnit.
fonte
As etapas para fazer uma verificação completa são:
Prepare o seqüestrador:
verifique se a chamada para dependente do componente (colaborador do sujeito em teste) vezes (1) é o valor padrão, portanto, não é necessário adicioná-lo.
Obter o argumento passado para o colaborador
someArgument pode ser usado para asserções
fonte
Aqui, estou fornecendo um exemplo adequado de um método de retorno de chamada. então suponha que tenhamos um método como o método login ():
Também coloquei toda a classe auxiliar aqui para tornar o exemplo mais claro: classe loginService
e temos o ouvinte LoginListener como:
}
agora eu só queria testar o método login () da classe Login
Também não se esqueça de adicionar anotações acima da classe de teste,
fonte
captor
definido na sua resposta?