unitarios test mock guia doubles datos java testing mocking mockito

java - test - Cómo simular/probar el método que devuelve vacío, posiblemente en Mockito



test doubles java (6)

doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { return null; } }).when(mock).method((SomeClass) anyObject());

Me encontré con un problema y no puedo encontrar una solución elegante.

Así que el problema es con un simulacro de controlador web de Selenium, y no sé cómo debería probar / simular métodos vacíos.

public void clickAndWait(String locator) { if(isElementPresent(locator) == false) throw some exception; selenium.clickAndWait(); //a problematic delegating call to selenium }

Entonces, lo que estoy preguntando es cómo probar adecuadamente dicho método, una prueba sería arrojar una excepción, pero ¿cómo hacer correctamente la prueba de ese método vacío que delegué?


También puedes usar:

  • El método Mockito.verify (simulacro / espía) para comprobar cuántas veces se ha llamado al método.
  • O use el captor de argumento para ver / verificar algunos parámetros pasados ​​al método de vacío.

Puede seleccionar una excepción en su llamada a método, aquí hay un pequeño ejemplo de cómo hacerlo:

doThrow(new RuntimeException()).when(mockedList).clear();

luego llamas a mockedList.clear(); método burlado arrojará una excepción.

O puede contar cuántas veces llamó su método, aquí hay un pequeño ejemplo de cómo hacerlo:

verify(mockedList, times(1)).clear();


Las respuestas anteriores han estado haciendo hincapié en hacer algo (lanzando una excepción) en cada llamada. De esta forma, cuando haces algo como:

doThrow(new RuntimeException()).when(mockedList).clear();

y luego llama al servicio aplastado (o lógica) como:

mockedList.clear();

generará una excepción. ¿Qué sucede si desea probar el funcionamiento correcto del método y escribir un caso de prueba positivo? Burlarse de un método de devolución de vacío para tal caso podría hacerse por:

doNothing().when(mockedList).clear();

lo que significa que desde que apagó el método clear() para simulacro mockedList , puede estar seguro de que este método no afectará la lógica de la unidad y aún así puede verificar el resto del flujo sin generar una excepción.


El siguiente ejemplo de código de esta documentación de Mockito ilustra cómo simular un método vacío:

doThrow(new RuntimeException()).when(mockedList).clear(); // following throws RuntimeException: mockedList.clear();


En Java 8 esto puede hacerse un poco más limpio

doAnswer((i) -> { // Do stuff with i.getArguments() here return null; }).when(*mock*).*method*(*methodArguments*);

El return null; es importante y sin eso la compilación fallará con algunos errores bastante oscuros ya que no podrá encontrar una anulación adecuada para doAnswer .