¿Puede Mockito eliminar un método sin tener en cuenta el argumento?

Resuelto Eric Wilson asked hace 13 años • 4 respuestas

Estoy intentando probar algún código heredado usando Mockito.

Quiero crear un código auxiliar FooDaoque 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 Bazooobjeto para el que eliminé el método. (¡Maldito sea ese newoperador!)

Me encantaría poder eliminar el método de manera que regrese myFooindependientemente 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.

Eric Wilson avatar May 12 '11 02:05 Eric Wilson
Aceptado
when(
  fooDao.getBar(
    any(Bazoo.class)
  )
).thenReturn(myFoo);

o (para evitar nulls):

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.*;
Tomasz Nurkiewicz avatar May 11 '2011 19:05 Tomasz Nurkiewicz

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 Bazooclase. Esto haría que su ejemplo de código funcione de la manera deseada.

Buhb avatar May 11 '2011 19:05 Buhb

Úselo así:

when(
  fooDao.getBar(
    Matchers.<Bazoo>any()
  )
).thenReturn(myFoo);

Antes de que necesites importarMockito.Matchers

 avatar Nov 21 '2014 05:11