Cómo burlarse de una variable estática en Java usando JMock
-
21-09-2019 - |
Pregunta
Tengo un problema de prueba unitaria donde una clase tiene una variable estática que quiere cargar la aplicación Spring CTX.
Esta clase no sale de la fábrica de frijoles y no puedo cambiar este hecho.
static ApplicationContext applicationContext = ...;
Esto funciona bien, pero es difícil de Jmock, o al menos no sé una forma y hasta que pueda el Spring CTX quiere comenzar. No es ideal para una situación de prueba unitaria.
¿Hay algún trabajo que alguien sepa? Tengo la opción de cambiar la variable estática a cualquier cosa que desee.
Gracias.
Solución
Resolví esto yo mismo.
Fue realmente simple al final. Justificado necesita envolver mi estática en una clase que podría burlarse.
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
Otros consejos
Agradable. La ironía es que lo único en lo que la primavera es buena es administrar singletons, por lo que no debería haber una necesidad de variables estáticas :)
Puede usar API JMock basadas en la reflexión para establecer campos privados / estáticos
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;
}