Доступ к Spring beans в JerseyTest

Я пытаюсь выяснить, как получить доступ к Spring beans из подкласса JerseyTest. Расширение JerseyTest Мне удалось загрузить контекст Spring в моих тестах, но я не понял, как получить доступ к контексту Spring. Моя настройка выглядит так:

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());
 }
}

В настройках используется Grizzly Web Container по умолчанию. Я никогда раньше не использовал Grizzly, но в Jetty я сделал бы что-то вроде этого:

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

Может ли кто-нибудь указать мне в правильном направлении?

3 ответа

Используя описанное решение здесь в течение недели, и он работает нормально.


Я использую наивный подход, но работает

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);
 }


Я не понимаю потребности JerseyTest, которая использует Spring bean, часто ваш Spring Beans - это уровень Service/Dao, и они должны быть Unit test/Integration Test на их слое, используя Mockito или DBUnit (интеграционные тесты).

Я участвовал в тестировании классов ресурсов Джерси с использованием Sprig Beans как издевки, потому что вам нужно изолировать тесты и тестировать только материал Джерси (и Json) на JerseyTest, а не на сервисе или на Dao Layer. выполните мой контекст Spring bean, но Spring Beans являются только mocks, потому что я не хочу тестировать Spring Beans в JerseyTests.

Если вы изолируете свои тесты, было бы легче писать и поддерживать тесты

licensed under cc by-sa 3.0 with attribution.