Доступ к весенним бобам в JerseyTest - PullRequest
7 голосов
/ 12 января 2011

Я пытаюсь выяснить, как получить доступ к бобам Spring из подкласса 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.Я никогда раньше не использовал 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 ]

10 голосов
/ 27 марта 2013

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

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);
    }
2 голосов
/ 19 января 2011

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

0 голосов
/ 08 июля 2014

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

Я проводил модульное тестирование классов ресурсов Джерси с использованием бобов Sprig в качестве фиктивных, это потому, что вы должны изолировать тесты и тестировать только вещи Джерси (и Json) в JerseyTest, а не на уровне сервиса или дао.Я пропускаю свой контекст весенних бинов, но весенние бобы - всего лишь пародия, потому что я не хочу тестировать весенние бобы в JerseyTests.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...