2013-04-11 33 views
6

Chúng tôi có sự trừu tượng rõ ràng giữa các lớp dịch vụ & xem các cấu hình ngữ cảnh của lớp và chúng tôi đang tải chúng như hình dưới đây.Cách thiết lập ngữ cảnh ứng dụng web trong thử nghiệm 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> 

Bây giờ chúng tôi đang cố gắng giới thiệu khung công tác thử nghiệm SPRING MVC để kiểm tra ứng dụng của chúng tôi.

Vì điều này, tôi sẽ cần phải thiết lập cùng một môi trường như ứng dụng web thực của tôi hoạt động.

Tôi có thể làm điều đó bằng cách nào?

Tôi đã thử cấu hình bên dưới trong thử nghiệm của mình để tải cả hai ngữ cảnh.

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

Nhưng nó erroring ra nói

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

Chúng tôi đã xác định an ninh toàn cầu trong cả hai bối cảnh ứng dụng gốc và bối cảnh ứng dụng web.

Lưu ý: Vấn đề trên sẽ không xuất hiện khi tôi chạy ứng dụng web của mình. Nó chỉ xảy ra khi tôi chạy thử nghiệm Spring MVc

Tôi đã cố gắng loại bỏ bảo mật toàn cầu của mình và một nơi rồi chuyển sang lỗi với dịch vụ chuyển đổi khi chạy thử nghiệm của mình. Mà cảnh báo tôi rằng tôi không tải bối cảnh như ứng dụng mùa xuân thực sự nào.

Bây giờ, tôi muốn thiết lập môi trường thử nghiệm Spring MVC để sử dụng hoặc làm việc giống như cách môi trường ứng dụng web mùa xuân của tôi hoạt động. Bất kỳ ai có thể đề nghị làm thế nào tôi có thể đạt được nó?

Trả lời

7

Sử dụng chú thích @ContextHierarchy. Javadoc của nó mô tả nó tốt. Trong trường hợp của bạn, bạn sẽ sử dụng

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

không đặt ứng dụng của bạnContext trong meta-inf.

Cách "bình thường" là phải có một mùa xuân-servlet.xml trong web của bạn-inf

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

và tiểu sau đó nhập các tập tin khác nhau bên trong file xml:

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

tôi tạo ra một seprate appContent cho các thử nghiệm của tôi:

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

Hạt của bạn phải được tải hai lần ở đâu đó dọc theo dòng, bạn đang nhập đậu hai lần, xác định cả hai trong xml và cũng chú thích?

+0

Tôi không muốn hợp nhất cả tệp ngữ cảnh hoặc đưa vào ngữ cảnh ứng dụng web vì một vài vấn đề kiến ​​trúc. Hơn nữa, tôi muốn thiết lập bối cảnh ứng dụng tương tự xảy ra khi chạy ứng dụng của tôi trong các thử nghiệm của tôi. – Shiv

Các vấn đề liên quan