2013-04-11 19 views
6

Mamy wyraźne abstrakcje między warstwami Service & zobacz konfiguracje kontekstów warstw i ładujemy je tak, jak pokazano poniżej.Jak skonfigurować kontekst aplikacji WWW w Spring Spring MVC

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> 

Teraz próbujemy wprowadzić SPRĘŻYNĘ MVC TEST FRAMEWORK, aby przetestować naszą aplikację.

W tym celu musiałbym skonfigurować to samo środowisko, w którym działa moja prawdziwa aplikacja internetowa.

Jak mogę to zrobić?

Próbowałem poniżej konfiguracji w moim teście, aby załadować oba konteksty.

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

Ale jego erroring się mówiąc

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

Określiliśmy globalnego bezpieczeństwa zarówno w kontekście głównego aplikacji i kontekstu aplikacji internetowych.

Uwaga: Powyższy problem nie pojawi się, gdy uruchomię swoją aplikację internetową. Zdarza się to tylko wtedy, gdy uruchamiam test Spring MVc

Próbowałem usunąć moje globalne bezpieczeństwo i jedno miejsce, a następnie lądując na błędach z usługami konwersji podczas uruchamiania moich testów. Ostrzegł mnie, że nie ładuję kontekstu, jak to robi prawdziwa aplikacja Spring.

Teraz chciałbym skonfigurować moje środowisko testowe Spring MVC do pracy lub pracy w taki sam sposób, jak działa moje wiosenne środowisko aplikacji internetowych. Czy ktokolwiek może zaproponować, w jaki sposób mogę to osiągnąć?

Odpowiedz

7

Użyj adnotacji @ContextHierarchy. Jego javadoc opisuje to dobrze. W twoim przypadku użyjesz

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

nie umieszczaj swojego appContext w meta-inf.

"normalna" droga ma mieć jeden spring-servlet.xml w WEB-INF

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

ANDN następnie importować różne pliki w pliku XML:

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

tworzę seprate appContent dla moich testów:

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

Twoje ziarna muszą być ładowane dwa razy gdzieś wzdłuż linii, czy dwa razy importujesz ziarenka, definiując je zarówno w xml, jak i adnotacje?

+0

Nie chcę scalać obu plików kontekstowych lub włączać go do kontekstu aplikacji WWW z powodu problemów z architekturą. Co więcej, chcę mieć tę samą konfigurację kontekstu aplikacji, co dzieje się również podczas uruchamiania mojej aplikacji w moich testach. – Shiv

Powiązane problemy