Junit 使用MockServletinLocationTest对Apache Wink REST服务进行单元测试

Junit 使用MockServletinLocationTest对Apache Wink REST服务进行单元测试,junit,mocking,apache-wink,Junit,Mocking,Apache Wink,我使用ApacheWink1.2.1。我想对我的REST服务进行单元测试,我宁愿不使用。我还没有找到任何例子,但经过大量的搜索,我猜这是正确的起点。。。然而,我一直无法使它工作 这里有一个对我来说失败的小例子 我的休息服务: @Path("greetings") public class GreetingsResource { @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { ret

我使用ApacheWink1.2.1。我想对我的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());
    }

}
公共类GreetingsResourceTest扩展了MockServletinLocationTest{
@凌驾
受保护类[]getClasses(){
返回新类[]{GreetingsResource.Class};
}
public void testHello()引发ServletException,IOException{
MockHttpServletRequest=MockRequestConstructor。
constructMockRequest(“GET”、“/greetings”、MediaType.TEXT\u PLAIN);
MockHttpServletResponse=invoke(请求);
assertEquals(200,response.getStatus());
}
}
因此,我有几个问题:

  • 我走错方向了吗

  • 如果我的方向正确,那么我做错了什么?在执行上一个测试用例时,我得到了以下错误(我真的不理解):

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


    我发现了我的问题所在,我只是在这里留下了一张便条,以防有人有同样的问题

    这就是为什么我得到了
    NoSuchMethodError

    • 我用它来处理依赖关系
    • 为了使用
      MockHttpServletRequest
      MockHttpServletResponse
      I包含了对SpringMock 2.0.8的依赖:

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-mock</artifactId>
        <version>2.0.8</version>
        <scope>test</scope>
      </dependency>
      
      
      org.springframework
      春季模拟
      2.0.8
      测试
      
    • 不幸的是,spring mock 2.0.8依赖于commons logging 1.1,而commons logging 1.1又依赖于servlet api 2.3,其中
      javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String
      不存在!该方法自ServletAPI 2.4以来就存在


    所以,为了解决我的问题,我简单地通过范围测试向ServletAPI2.4添加了一个显式依赖项!现在我的单元测试工作没有问题了

    我发现了我的问题所在,我只是在这里留下了一张便条,以防有人有同样的问题

    这就是为什么我得到了
    NoSuchMethodError

    • 我用它来处理依赖关系
    • 为了使用
      MockHttpServletRequest
      MockHttpServletResponse
      I包含了对SpringMock 2.0.8的依赖:

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-mock</artifactId>
        <version>2.0.8</version>
        <scope>test</scope>
      </dependency>
      
      
      org.springframework
      春季模拟
      2.0.8
      测试
      
    • 不幸的是,spring mock 2.0.8依赖于commons logging 1.1,而commons logging 1.1又依赖于servlet api 2.3,其中
      javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String
      不存在!该方法自ServletAPI 2.4以来就存在


    所以,为了解决我的问题,我简单地通过范围测试向ServletAPI2.4添加了一个显式依赖项!现在我的单元测试工作没有问题了

    您是如何发现依赖项错误的
    maven tree
    ?@bubuzzz:我真的不记得我是怎么想出来的:)。。。我猜是因为我绝望了,我开始浏览所有Maven依赖关系树。你是如何发现依赖关系错误的
    maven tree
    ?@bubuzzz:我真的不记得我是怎么想出来的:)。。。我猜是因为我绝望了,我开始浏览所有Maven依赖树。