2013-04-11 10 views
6

Abbiamo una chiara astrazione tra i livelli di servizio & visualizza le configurazioni del contesto dei livelli e li stiamo caricando come mostrato di seguito.Come impostare il contesto dell'applicazione Web nel test MVC di primavera

Root application context: 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value> 
</context-param> 

Web application context: 

<servlet> 
    <servlet-name>lovemytasks</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/mmapp-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Ora stiamo cercando di introdurre Spring MVC TEST QUADRO per testare la nostra applicazione.

Per questo ho bisogno di configurare lo stesso ambiente in cui funziona la mia vera applicazione web.

Come posso farlo?

Ho provato sotto la configurazione del mio test per caricare entrambi i contesti.

@ContextConfiguration(locations = { "classpath*:META-INF/spring/applicationContext*.xml", 
    "file:src/main/webapp/WEB-INF/spring/mmapp-servlet.xml" }) 

Ma la sua erroring fuori dicendo

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Duplicate <global-method-security> detected. 

Abbiamo definito la sicurezza globale sia in contesto applicativo radice e il contesto di applicazioni web.

Nota: il problema sopra riportato non verrà visualizzato quando eseguo la mia applicazione web. Succede solo quando eseguo il test Spring MVc

Ho provato a rimuovere la mia sicurezza globale e un posto e poi a creare errori con i servizi di conversione durante l'esecuzione dei miei test. Il che mi ha avvertito che non sto caricando il contesto come fa la vera applicazione Spring.

Ora, vorrei impostare il mio ambiente di test Spring MVC per utilizzare o lavorare allo stesso modo in cui funziona l'ambiente delle applicazioni web Spring. Qualcuno può suggerire come posso ottenerlo?

risposta

7

Utilizzare l'annotazione @ContextHierarchy. Il suo javadoc lo descrive bene. Nel tuo caso useresti

@WebAppConfiguration 
@ContextHierarchy({ 
    @ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext-*.xml" }), 
    @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/mmapp-servlet.xml" }) 
}) 
1

non mettere l'appContext in meta-inf.

Il modo "normale" è quello di avere una molla-servlet.xml nel vostro web-inf

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>WEB-INF/spring-servlet.xml</param-value> 
    </context-param> 

andn quindi importare file differenti all'interno del file xml:

<import resource="classpath:beans.xml"/> 

creo un ContAppl sepre per le mie prove:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations ="classpath:applicationContext-test.xml") 
@Transactional 
public class MyTest { 

vostri fagioli devono essere sempre caricati due volte da qualche parte lungo la linea, stai importando i fagioli due volte, definendoli entrambi in xml e anche annotando?

+0

Non voglio unire entrambi i file di contesto o includerlo nel contesto dell'applicazione web a causa di pochi problemi architettonici. Inoltre, voglio la stessa impostazione del contesto dell'applicazione che si verifica durante l'esecuzione della mia applicazione anche nei miei test. – Shiv

Problemi correlati