2011-01-12 56 views
7

Tôi đang cố gắng tìm ra cách truy cập các bean Spring từ một lớp con của JerseyTest. Mở rộng JerseyTest Tôi đã quản lý để tải bối cảnh mùa xuân trong các thử nghiệm của mình, nhưng tôi đã không tìm ra cách truy cập bối cảnh mùa xuân. Thiết lập của tôi trông giống như sau:Truy cập các hạt đậu mùa xuân ở JerseyTest

public abstract class SpringJerseyTest extends JerseyTest { 
    public SpringJerseyTest() throws Exception { 
     super(new WebAppDescriptor.Builder("com.acme.resources") 
      .contextPath("/") 
      .contextParam("contextConfigLocation", "classpath:applicationContext.xml") 
      .servletClass(SpringServlet.class) 
      .contextListenerClass(ContextLoaderListener.class) 
      .build()); 
    } 

} 

Thiết lập đang sử dụng Vùng chứa Web Grizzly mặc định. Tôi chưa bao giờ sử dụng Grizzly trước đây, nhưng trong Jetty tôi sẽ làm một cái gì đó như thế này:

public Object getSpringBean(String beanName) { 
     WebAppContext context = (WebAppContext) server.getHandler(); 
     ServletContext sc = context.getServletContext(); 
     WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc); 
     return applicationContext.getBean(beanName); 
    } 

Bất cứ ai có thể chỉ cho tôi đi đúng hướng?

+0

Không chắc chắn nếu có một cách khác xung quanh này, nhưng tôi tìm thấy bài đăng trên blog này: http://geek.riffpie.com/2010/ 08/09/unit-testing-restful-jersey-services-dán-cùng-với-mùa xuân/Sử dụng hỗ trợ kiểm tra jersey Tôi bây giờ có thể sử dụng @Autowired trong các bài kiểm tra của tôi là tốt. – ebaxt

+0

Dường như liên kết ở trên bị hỏng, liên kết được cập nhật: http://geek.riffpie.com/unit-testing-restful-jersey-services-glued-together-with-spring/ – crobicha

Trả lời

2

Đã sử dụng giải pháp được mô tả here trong một tuần và hoạt động tốt.

10

Tôi đang sử dụng một cách tiếp cận ngây thơ nhưng làm việc

public ResourceIT() 
    { 
     super(new WebAppDescriptor.Builder("amazingpackage") 
       .servletClass(SpringServlet.class) 
       .contextParam("contextConfigLocation", "classpath:/spring/context.xml") 
       .contextListenerClass(ContextLoaderListener.class) 
       .contextPath("context") 
       .build()); 
     injectedBean = ContextLoaderListener 
       .getCurrentWebApplicationContext().getBean(InjectedBean.class); 
    } 
-1

Tôi không hiểu sự cần thiết của JerseyTest sử dụng đậu mùa xuân, thường Đậu mùa xuân của bạn Dịch vụ/lớp Dao và họ phải được đơn vị kiểm tra/Tích hợp Thử nghiệm trên lớp của họ, sử dụng Mockito hoặc DBUnit (kiểm thử tích hợp).

Tôi đã được kiểm tra đơn vị Lớp tài nguyên Jersey sử dụng hạt Sprig như mocks, điều này là bởi vì bạn phải cô lập các bài kiểm tra, và kiểm tra chỉ Jersey công cụ (và Json) trong JerseyTest, không dịch vụ hoặc lớp Dao. thông qua bối cảnh đậu mùa xuân của tôi, nhưng đậu mùa xuân chỉ là mocks, vì tôi không muốn thử nghiệm đậu mùa xuân trong JerseyTests.

Nếu bạn cô lập bạn kiểm tra nó sẽ dễ dàng hơn để viết và duy trì kiểm tra của bạn

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