Come deridere una variabile statica in Java usando JMock
-
21-09-2019 - |
Domanda
Ho un problema di test unitario in cui una classe ha una variabile statica che desidera caricare Spring Application Ctx.
Questa classe NON esce dalla Bean Factory e non posso cambiare questo fatto.
static ApplicationContext applicationContext = ...;
Funziona bene, ma è difficile JMock, o almeno non conosco il modo e finché posso lo Spring Ctx vuole avviarsi.Non è l'ideale per una situazione di test unitario.
C'è una soluzione che qualcuno conosce?Ho la possibilità di cambiare la variabile statica in qualsiasi cosa desideri..
Grazie.
Soluzione
Ho risolto questo io stesso.
Era davvero semplice alla fine. Sovvenuto di avvolgere il mio statico in una classe che potrei quindi deridere.
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
Altri suggerimenti
Bello. L'ironia è che l'unica cosa in cui la primavera è brava è gestire singoli, quindi non dovrebbe esserci il bisogno di variabili statiche :)
È possibile utilizzare le API JMock basate sulla riflessione per impostare campi privati/statici
import static mockit.Deencapsulation.setField;
//Test method
public void testSample {
setField(Sample.class,"isPrivate",true);
setField(Sample.class,"isStatic",true);
}
private class Sample {
private boolean isPrivate = false;
private boolean isStatic = false;
}