Closed acuevas-dgtic closed 3 years ago
Aquest avís ve per el test TestLoggerInterceptor
. Aquesta classe fa els tests unitaris de la classe LoggerInterceptor
que és una classe de mostra de com ficar un interceptor als EJB i la seva única funció és produir un log de debug abans i després de la invocació d'un mètode.
Per fer el test unitari amb mockito d'aquesta classe requereix inserir un mock damunt l'objecte que fa els logs, per verificar les interaccions. Però com amb la resta del projecte, el log dins LoggerInterceptor
està definit així:
private static final Logger LOG = LoggerFactory.getLogger(LoggerInterceptor.class);
Llavors, la qüestió és de quina manera es pot inserir un objecte Logger
mock per verficar les interaccions als tests unitaris si el camp és private
i final
. I la sol·lució és emprant reflection, que és el que fa el setup
de TestLoggerInterceptor
//allow log field to be changed
Field field = LoggerInterceptor.class.getDeclaredField("LOG");
field.setAccessible(true);
//remove final modifier
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
//set to mock object
field.set(null, log);
Aquestes sentències provoquen l'avís indicat.
No se m'ocorr altre manera de fer el test unitari. Tal volta es podria llevar aquest test unitari, o es podria canviar el camp perquè no sigui private
i final
, però d'altra banda és la manera "correcte" de definir els loggers entenc, i de fet així és com estan definits a totes les classes.
Entonces lo podemos dejar como está,