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
.