¿Alguien puede proporcionarme un ejemplo que muestre cómo usar la org.mockito.ArgumentCaptor
clase y cómo es diferente de los simples matchers que se proporcionan con mockito?
Leí los documentos simulados proporcionados, pero esos no lo ilustran claramente, ninguno de ellos puede explicarlo con claridad.
java
unit-testing
junit
mockito
Ujjwal
fuente
fuente
doSomething(data)
mutainnerData
, ¿ese cambio estará presenteassertEquals("Some inner data", actual.innerData)
o seinnerData
capturará tal cual antes dedoSomething
ejecutarse?OtherClass
es un simulacro, y como se define ahoradoSomething()
, en realidad no hará nada, simplemente registra el objeto que se pasó. Esto significa que se capturará tal cual antes dedoSomething
ejecutarse.verify
,times(1)
es el valor predeterminado y se puede omitir.verify
método, utiliza esa información para ejecutar coincidencias con la verificación que está haciendo. Para cada parámetro, pregunta si coincide con la llamada específica que verifica. Cuando se marca ArgumentCaptor, simplemente almacena los valores con los que se invocó para que, cuandoverify
finalice, contenga todas las invocaciones relevantes. Es más o menos cómo funciona. Espero que ayudeLas dos diferencias principales son:
ArgumentCaptor
puede capturar más de una vez.Para ilustrar esto último, diga que tiene:
Luego, el captor podrá darle acceso a los 4 argumentos, sobre los cuales puede realizar aserciones por separado.
Esto o cualquier número de argumentos, de hecho, ya que un
VerificationMode
no se limita a un número fijo de invocaciones; En cualquier caso, el captor le dará acceso a todos ellos, si lo desea.Esto también tiene el beneficio de que tales pruebas son (en mi humilde opinión) mucho más fáciles de escribir que tener que implementar las suyas propias.
ArgumentMatcher
s, particularmente si combina mockito con afirmación.Ah, y considere usar TestNG en lugar de JUnit.
fuente
Los pasos para hacer una verificación completa son:
Prepara al captor:
verificar que la llamada a dependiente del componente (colaborador del sujeto bajo prueba) veces (1), es el valor predeterminado, por lo que no es necesario agregarlo.
Haz que el argumento pase al colaborador
someArgument puede usarse para afirmaciones
fuente
Aquí te estoy dando un ejemplo adecuado de un método de devolución de llamada. así que supongamos que tenemos un método como método login ():
También puse toda la clase auxiliar aquí para aclarar el ejemplo: clase loginService
y tenemos oyente LoginListener como:
}
ahora solo quería probar el método login () de la clase Login
Tampoco olvide agregar anotaciones sobre la clase de prueba como
fuente
captor
definido en tu respuesta?