2011-01-12 13 views
7

Próbuję dowiedzieć się, jak uzyskać dostęp do fasoli Spring z podklasy w JerseyTest. Rozszerzanie JerseyTest Udało mi się wczytać kontekst Spring podczas moich testów, ale nie wiedziałem, jak uzyskać dostęp do kontekstu sprężyn. Moja konfiguracja wygląda następująco:Uzyskiwanie dostępu do fasoli Spring w 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()); 
    } 

} 

Konfiguracja wykorzystuje domyślny kontener WWW Grizzly. Nigdy nie stosować Grizzly wcześniej, ale w Jetty chciałbym zrobić coś takiego:

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

Czy ktoś może wskazać mi w dobrym kierunku?

+0

Nie wiem, czy istnieje inny sposób obejść ten problem, ale znalazłem ten blogpost: http://geek.riffpie.com/2010/ 08/09/testowanie jednostkowe-restful-jersey-services-sklejone ze sprężyną/Korzystając z testu testu koszulki, mogę teraz również używać @Autowired w moich testach. – ebaxt

+0

Wygląda jak link powyżej jest uszkodzony, zaktualizowany link: http://geek.riffpie.com/unit-testing-restful-jersey-services-glued-together-with-spring/ – crobicha

Odpowiedz

2

Korzystam z rozwiązania opisanego na here przez tydzień i działa dobrze.

10

Używam naiwne podejście, ale działa

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

Nie rozumiem potrzebę JerseyTest który używa wiosny fasoli, często twoi Fasola Wiosna to życzenie/warstwa Dao i muszą być testy jednostkowe Test/Integracja na ich warstwie, używając Mockito lub DBUnit (testy integracji).

Byłem jednostką Testowanie klas zasobów Jersey przy użyciu fasoli Sprig jako mocks, to dlatego, że musisz wyizolować testy i przetestować tylko rzeczy z Jersey (i Json) w JerseyTest, nie Service lub Dao Layer., Tak, robię przekazać mój kontekst z fasolą wiosenną, ale fasolka wiosenna to tylko makiety, ponieważ nie chcę testować fasoli szparagowej w testach na Jersey.

Jeśli izolować ci testy byłoby łatwiej pisać i utrzymać testy

Powiązane problemy