2012-05-15 3 views
8

JerseyTest를 사용하여 RESTful 웹 서비스에 대한 JUnit 기반 통합 테스트를 작성하고 있습니다. JAX-RS 자원 클래스는 스프링을 사용하고 난 현재와 같은 테스트 케이스와 함께 evernthing 배선있어 다음과 같은 것이 :Spring과 Jersey 테스트 프레임 워크를 이용한 단위 테스트

이 서블릿을 배선 작동
public class HelloResourceTest extends JerseyTest 
{ 
    @Override 
    protected AppDescriptor configure() 
    { 
     return new WebAppDescriptor.Builder("com.helloworld") 
     .contextParam("contextConfigLocation", "classpath:helloContext.xml") 
     .servletClass(SpringServlet.class) 
     .contextListenerClass(ContextLoaderListener.class) 
     .requestListenerClass(RequestContextListener.class) 
     .build();   
    } 

    @Test 
    public void test() 
    { 
     // test goes here 
    } 
} 

그러나, 나는를 공유 할 수 있도록하고 싶습니다 나의 테스트가 SpringJUnit4ClassRunner를 요구하는 것 같은 모의 객체, DAO 등에 접근 할 수 있도록 테스트 케이스 내에서 동일한 문맥을 사용한다. 아쉽게도 SpringJUnit4ClassRunner는 별도의 병렬 응용 프로그램 컨텍스트를 만듭니다.

그렇다면 SpringServlet과 테스트 케이스간에 공유되는 애플리케이션 컨텍스트를 어떻게 만들 수 있습니까?

감사합니다.

답변

5

이 문제를 해결하는 데 몇 가지 방법이 있습니다.

첫번째로, 상으로 문제 해결을 JerseyTest의 우아한 확장과 함께이 문제의 훌륭한 설명이있는 괴짜 @의 riffpie 블로그에서 : 불행하게도 Unit-testing RESTful Jersey services glued together with Spring

가, 나는 최신 버전을 사용하고 있습니다 Spring and/or Jersey (어느 것을 잊어라)와 그것이 일하게하는 것을 아주 알 수 없었다.

제 경우에는 저지 테스트 프레임 워크를 삭제하고 Jersey 클라이언트와 함께 임베디드 Jetty를 사용하여 문제를 피할 수있었습니다. 내 응용 프로그램에서 이미 임베디드 Jetty를 사용하고 있었기 때문에 실제로 상황에서 더 잘 이해할 수있었습니다. yves amsellem에는 unit testing with the Jersey Client and embedded Jetty의 좋은 예가 있습니다. Spring 통합을 위해, 그래서 같은 Trimbo의Jersey Tests with Embedded Jetty and Spring

+0

[이 다른 샘플 코드] (https://github.com/yamsellem/jersey-basics/blob/master/src/test/java/com/xebia/resource/ProductResourceJacksonTest.java)는 Grizzly 또는 배포를위한 부두. Grizzly는 조금 빠르지 만 web.xml을 사용할 수 없으므로 코드별로 구성해야합니다. –

9

무시 JerseyTest.configure의 변형 사용 :

@Override 
protected Application configure() { 
    ResourceConfig rc = new JerseyConfig(); 

    rc.register(SpringLifecycleListener.class); 
    rc.register(RequestContextFilter.class); 

    rc.property("contextConfigLocation", "classpath:helloContext.xml"); 
    return rc; 
} 

SpringServlet이 필요하지 않은 나를 위해,하지만 당신은 당신이 전화를 할 수 있음을 필요로하는 경우 rc.register 역시 그렇게합니다.

+1

귀하의 솔루션은 Jersey 2.x 용입니다. – NSPKUWCExi2pr8wVoGNk

+0

@ben : contextConfigLocation에 여러 응용 프로그램 컨텍스트를 전달하는 데 도움을 주시겠습니까? 쉼표로 구분 된 배열 또는 문자열 배열은 허용되지 않습니다. – developer

+0

한 가지 방법은 테스트 스프링 컨텍스트를 만들고 해당 애플리케이션 컨텍스트를 파일로 가져 오는 것입니다. 저지 설정의 테스트 파일을 사용하십시오 – Chandru

관련 문제