En la documentación de Mockito y javadocs dice
Se recomienda usar ArgumentCaptor con la verificación pero no con el apéndice.
pero no entiendo cómo ArgumentCaptor se puede usar para tropezar. ¿Alguien puede explicar la declaración anterior y mostrar cómo ArgumentCaptor se puede usar para tropezar o proporcionar un enlace que muestre cómo se puede hacer?
java
unit-testing
junit
mockito
No puedo decir
fuente
fuente
Respuestas:
Suponiendo el siguiente método para probar:
Documentación Mockito dice que usted debe no utilizar captor de esta manera:
Debido a que solo puede usar matcher durante el apisonamiento:
Pero la verificación es una historia diferente. Si su prueba necesita asegurarse de que este método fue llamado con un argumento específico, use
ArgumentCaptor
y este es el caso para el que está diseñado:fuente
false
, notrue
.La línea
haría lo mismo que
Entonces, usar el argumentoCaptor.capture () cuando el apilamiento no tiene valor agregado. El uso de Matchers.any () muestra mejor lo que realmente sucede y, por lo tanto, es mejor para la legibilidad. Con argumentoCaptor.capture (), no puede leer qué argumentos realmente coinciden. Y en lugar de usar any (), puede usar coincidencias más específicas cuando tenga más información (clase del argumento esperado), para mejorar su prueba.
Y otro problema: si utiliza el argumentoCaptor.capture () al realizar un apéndice, no queda claro cuántos valores debe esperar capturar después de la verificación. Queremos capturar un valor durante la verificación, no durante el apilamiento porque en ese momento todavía no hay ningún valor para capturar. Entonces, ¿qué capturan los captores de argumentos el método de captura durante el apisonamiento? o no captura nada? No tengo la respuesta a esta pregunta. Considero que es un comportamiento indefinido y no quiero usar un comportamiento indefinido.
fuente
Hipotéticamente, si la búsqueda te llevó a esta pregunta, entonces probablemente quieras esto:
¿Por qué? Porque como yo, usted valora el tiempo y no lo va a implementar
.equals
solo por el solo escenario de prueba.Y el 99% de las pruebas se desmoronan con una devolución nula de Mock y en un diseño razonable evitaría la devolución
null
a toda costa, usarOptional
o mudarse a Kotlin. Esto implica queverify
no es necesario usarlo tan a menudo y ArgumentCaptors es demasiado tedioso para escribir.fuente