在Java中模拟HTTPRequest和HTTPResponse对象

在Java中模拟HTTPRequest和HTTPResponse对象,java,servlets,Java,Servlets,如何模拟HTTPServletRequest和HTTPServletResponse对象。原因是我想测试一些servlet的行为 我知道JUnit可能提供了这个功能,但我不知道如何使用它(我很快就会学习),需要合理地快速完成 HTTPServletRequest和HTTPServletResponse都是接口,因此无法实例化它们。有一个HttpServletRequestWrapper实现了HttpServletRequest,但它似乎没有任何setParameter()类型方法,HttpSer

如何模拟
HTTPServletRequest
HTTPServletResponse
对象。原因是我想测试一些servlet的行为

我知道JUnit可能提供了这个功能,但我不知道如何使用它(我很快就会学习),需要合理地快速完成

HTTPServletRequest和HTTPServletResponse都是接口,因此无法实例化它们。有一个
HttpServletRequestWrapper
实现了HttpServletRequest,但它似乎没有任何
setParameter()
类型方法,HttpServletResponse似乎根本没有任何实现类


我如何通过传递一个合适的
HttpServletRequest
对象,然后检查收到的
HttpServletResponse
对象是否与我期望的匹配来测试我的代码呢?

它是一个接口,这使得模拟更容易:模拟最终的类非常棘手

class MyHttpServletRequest implements HttpServletRequest
{
  //whatever
}

class MyHttpServletResponse implements HttpServletResponse
{
  //whatever
}


doGet(new MyHttpServletRequest(),
      new MyHttpServletResponse())

子类化HttpServletRequestWrapper可能更容易,但不是必需的。我会看一下重写和

它是一个接口这一事实使得模拟更容易:模拟最终类是很棘手的

class MyHttpServletRequest implements HttpServletRequest
{
  //whatever
}

class MyHttpServletResponse implements HttpServletResponse
{
  //whatever
}


doGet(new MyHttpServletRequest(),
      new MyHttpServletResponse())
子类化HttpServletRequestWrapper可能更容易,但不是必需的。我将研究覆盖并创建一个虚拟对象:

class MyDummyRequest implements HTTPServletRequest{
    //implement your own methods, for example:
    public Map getParameterMap(){
        Map myMap = new HashMap();
        //put the params you need inside myMap
        return myMap;
    }
}
如果您希望避免为测试目的创建虚拟对象,您可以查看一个可用的Java库,例如Mockito。

创建虚拟对象:

class MyDummyRequest implements HTTPServletRequest{
    //implement your own methods, for example:
    public Map getParameterMap(){
        Map myMap = new HashMap();
        //put the params you need inside myMap
        return myMap;
    }
}

如果您想避免为测试目的创建虚拟对象,您可以查看一个可用的Java库,例如Mockito。

Ok,谢谢。。。这也让我更好地理解了接口的意义。好的,谢谢。。。这也让我更好地理解了接口的意义。