2011-01-07 1452 views

Respuesta

8

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); 
} 
+0

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

+0

¿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

+0

me parece correcto. ContextLoader es la interfaz que especifica cómo convertir una matriz de cadenas en un contexto de aplicación. – Pace

Cuestiones relacionadas