Crear su propio ContextLoader y adjuntar esta anotación a su clase JUnit:
@ContextConfiguration(loader=YourLoader.class)
Este es mi ejemplo cargador que crea la instancia de otra o la costumbre Application Context, que a su vez puede ser inicializado con la costumbre BeanFactory (dependiendo de las capacidades):
public class XmlWebApplicationContextLoader extends AbstractContextLoader {
public final ConfigurableApplicationContext loadContext(final String... locations) throws Exception {
ServletContext servletContext = new MockServletContext("war", new FileSystemResourceLoader());
GenericWebApplicationContext webContext = new GenericWebApplicationContext();
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, webContext);
webContext.setServletContext(servletContext);
new XmlBeanDefinitionReader(webContext).loadBeanDefinitions(locations);
AnnotationConfigUtils.registerAnnotationConfigProcessors(webContext);
webContext.refresh();
webContext.registerShutdownHook();
return webContext;
}
protected String getResourceSuffix() {
return "";
}
}
En contexto de aplicación caso anterior (proporcionado por Spring Framework) tiene constructor:
public GenericWebApplicationContext(DefaultListableBeanFactory beanFactory) {
super(beanFactory);
}
Y exactamente ¿cómo funciona esto? He estado leyendo el código fuente de primavera de ContextLoader y no puedo hacer que acepte mi BeanFactory. Y AFIK ContextLoader! = BeanFactory – krosenvold
¿Qué tipo de contexto de aplicación está utilizando? Puede instanciar GenericApplicationContext con BF nuevo y luego devolverlo con el método loadContext de su cargador personalizado. – gertas
me parece correcto. ContextLoader es la interfaz que especifica cómo convertir una matriz de cadenas en un contexto de aplicación. – Pace