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.

¿Fue útil?

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;

    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top