2013-03-04 2 views
0

Apache Wink 1.2.1을 사용합니다. 나는 단위 테스트에 내 REST 서비스를 원하고, 차라리 RestClient을 사용하지 않고하고 싶습니다. 나는 어떤 예도 찾지 못했지만, 많은 검색을 한 후에 나는 MockServletInvocationTest이 올바른 출발점이었다고 생각했다. 그러나 나는 그것을 작동하게 만들지 못했다.유닛 테스트 MockServletInvocationTest를 사용한 Apache Wink REST 서비스

나를 위해 실패하는 최소한의 예입니다.

내 REST 서비스 :

대응하는 단위 테스트
@Path("greetings") 
public class GreetingsResource { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String hello() { 
     return "Hello World!"; 
    } 

} 

:

public class GreetingsResourceTest extends MockServletInvocationTest { 

    @Override 
    protected Class<?>[] getClasses() { 
     return new Class<?>[] { GreetingsResource.class }; 
    } 


    public void testHello() throws ServletException, IOException { 
     MockHttpServletRequest request = MockRequestConstructor. 
      constructMockRequest("GET", "/greetings", MediaType.TEXT_PLAIN); 
     MockHttpServletResponse response = invoke(request); 
     assertEquals(200, response.getStatus()); 
    } 

} 

그래서, 나는 몇 가지 질문이 있습니다

  1. 내가 잘못된 방향으로 가고 있는가 ?

  2. 내가 올바른 방향으로 가고 있다면, 내가 뭘 잘못하고있는 걸까요? 이전 테스트 케이스를 실행할 때 나는 다음과 같은 오류 (난 정말 이해가 안되는) 얻을 : 내 문제가 무엇인지 발견

java.lang.NoSuchMethodError: javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String; at org.apache.wink.server.internal.handlers.FlushResultHandler$FlushHeadersOutputStream.flushHeaders(FlushResultHandler.java:350) ~[wink-server-1.2.1-incubating.jar:1.2.1-incubating]

답변

2

를, 나는 단지의 경우 누군가 여기에 메모를 남겨했다 같은 문제. 나는 NoSuchMethodError 가지고 왜 여기

은 다음과 같습니다

  • 을 내가 MockHttpServletRequestMockHttpServletResponse 내가-모의 튀어 종속성을 포함 사용 종속
  • 를 처리 할 수 ​​Apache Maven를 사용 2.0.8 :

    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-mock</artifactId> 
        <version>2.0.8</version> 
        <scope>test</scope> 
    </dependency> 
    
  • 불행히도 spring-mock 2.0.8은 commons-logging 1.1에 대한 종속성을 가지며, 이는 차례로 servlet-ap에 종속됩니다 i 2.3, javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String가 존재하지 않습니다! 그 방법은 servlet-api 이후로 존재합니다. 2.4

그래서 내 문제를 해결하기 위해 servlet-api 2.4에 범위 테스트를 명시 적으로 추가했습니다! 이제 나의 단위 테스트는 문제없이 작동합니다!

+0

어떻게 종속성 오류를 파악 했습니까? '메이븐 트리 '? –

+0

@bubuzzz : 나는 솔직히 내가 어떻게 알아 냈는지 기억하지 못합니다. :) 필사적 이었기 때문에 나는 모든 Maven 의존성 트리를 살펴보기 시작했습니다. – MarcoS

관련 문제