Estoy tratando de escribir una prueba unitaria para probar esta pieza de código, pero yo intento fallido en límites Mockito / Powermockito con clase nativa java.lang.Class como se explica aquí .
¿Cómo podría probar esto:
Method[] serverStatusMethods = serverStatus.getClass().getMethods();
for (Method serverStatusMethod : serverStatusMethods) {
if (serverStatusMethod.getName().equalsIgnoreCase("get" + field)) {
serverStatusMethod.setAccessible(true);
try {
Number value = (Number) serverStatusMethod.invoke(serverStatus);
response = new DataResponse(field + " value", value);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(StatusServlet.class.getName()).log(Level.SEVERE, null, ex);
response = new ErrorResponse(HttpStatus.Code.INTERNAL_SERVER_ERROR, ex);
}
break;
}
}
para lanzar excepciones esta forma intencionada en caso de prueba:
catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(StatusServlet.class.getName()).log(Level.SEVERE, null, ex);
response = new ErrorResponse(HttpStatus.Code.INTERNAL_SERVER_ERROR, ex);
}
Haz lo que haces siempre burlándose de una clase es demasiado difícil: agrega otra capa de abstracción. Ej extraer las operaciones reflectantes en un método separado:
public Number resolveServerStatus(Object serverStatus)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
Method[] serverStatusMethods = serverStatus.getClass().getMethods();
for (Method serverStatusMethod : serverStatusMethods) {
if (serverStatusMethod.getName().equalsIgnoreCase("get" + field)) {
serverStatusMethod.setAccessible(true);
return (Number) serverStatusMethod.invoke(serverStatus);
}
}
}
Ahora burlarse del resolveServerStatus
método.
Esto es lo que debería haber hecho en primer lugar si se hubiera seguido el principio de la responsabilidad individual . Su método tenía dos responsabilidades: resolver el número de estado y convertirlo en DataResponse
objeto. Las múltiples responsabilidades hicieron probar el método dififficult.