¿Puede Mockito eliminar un método sin tener en cuenta el argumento?
Estoy intentando probar algún código heredado usando Mockito.
Quiero crear un código auxiliar FooDao
que se utiliza en producción de la siguiente manera:
foo = fooDao.getBar(new Bazoo());
Puedo escribir:
when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);
Pero el problema obvio es que getBar()
nunca se llama con el mismo Bazoo
objeto para el que eliminé el método. (¡Maldito sea ese new
operador!)
Me encantaría poder eliminar el método de manera que regrese myFoo
independientemente del argumento. De lo contrario, escucharé otras sugerencias de solución, pero realmente me gustaría evitar cambiar el código de producción hasta que haya una cobertura de prueba razonable.
when(
fooDao.getBar(
any(Bazoo.class)
)
).thenReturn(myFoo);
o (para evitar null
s):
when(
fooDao.getBar(
(Bazoo)notNull()
)
).thenReturn(myFoo);
No olvide importar coincidencias (hay muchas otras disponibles):
Para Mockito 2.1.0 y posteriores:
import static org.mockito.ArgumentMatchers.*;
Para versiones anteriores:
import static org.mockito.Matchers.*;
http://site.mockito.org/mockito/docs/1.10.19/org/mockito/Matchers.html
anyObject()
debe ajustarse a sus necesidades.
Además, siempre puedes considerar implementar hashCode()
y equals()
para la Bazoo
clase. Esto haría que su ejemplo de código funcione de la manera deseada.
Úselo así:
when(
fooDao.getBar(
Matchers.<Bazoo>any()
)
).thenReturn(myFoo);
Antes de que necesites importarMockito.Matchers