Por fin luego de tanto batallar ya encontramos la solución de esta aprieto que ciertos de nuestros lectores de esta web han tenido. Si deseas aportar algo no dudes en compartir tu información.
Solución:
-
any()
no comprueba absolutamente nada. En Mockito 1.x,any(T.class)
tampoco verifica absolutamente nada, pero también le ahorra un lanzamiento (antes de Java 8).Esto se debe a cambios en Mockito 2.0 y posteriores, cuando
any(T.class)
Va a compartirisA
semántica para significar “cualquierT
” o correctamente “cualquier instancia de tipoT
“.any()
seguirá comprobando absolutamente nada. -
isA(T.class)
comprueba que el argumentoinstanceof T
lo que implica que no esnull. -
same(obj)
comprueba que el argumento es la misma instancia queobj
tal quearg == obj
es true. -
eq(obj)
comprueba que el argumento es igualobj
de acuerdo a suequals
método. Este también es el comportamiento si pasa valores reales sin usar comparadores.Tenga en cuenta que a menos que
equals
se anula, verá la implementación predeterminada de Object.equals, que tendría el mismo comportamiento quesame(obj)
.
Si necesita una personalización más exacta, puede usar un adaptador para su propio predicado:
- Para Mockito 1.x, use
argThat
con un Hamcrest personalizadoMatcher
que selecciona exactamente los objetos que necesita. - Para Mockito 2.0 y posteriores, use
Matchers.argThat
con una costumbreorg.mockito.ArgumentMatcher
oMockitoHamcrest.argThat
con un Hamcrest personalizadoMatcher
.
Si su Request.class implementa iguales, entonces puede usar eq():
Bar bar = getBar();
when(fooService.fooFxn(eq(bar)).then...
Lo anterior cuando se activaría en
fooService.fooFxn(otherBar);
si
otherBar.equals(bar);
Alternativamente, si desea que el simulacro funcione para algún otro subconjunto de entrada (por ejemplo, todas las barras con Bar.getBarLength()>10), puede crear un Matcher. No veo este patrón con demasiada frecuencia, por lo que normalmente creo el Matcher como una clase privada:
private static class BarMatcher extends BaseMatcher
...//constructors, descriptions, etc.
public boolean matches(Object otherBar)
//Checks, casts, etc.
return otherBar.getBarLength()>10;
Entonces usaría este comparador de la siguiente manera:
when(fooService.fooFxn(argThat(new BarMatcher())).then...
¡Espero que ayude!
Reseñas y puntuaciones
Eres capaz de añadir valor a nuestra información colaborando tu veteranía en las interpretaciones.