【问题标题】:Mimic an HTTPRequest and HTTPResponse object in Java在 Java 中模拟 HTTPRequest 和 HTTPResponse 对象
【发布时间】:2010-05-20 03:34:22
【问题描述】:

如何模仿HTTPServletRequestHTTPServletResponse 对象。原因是我想测试一些 servlet 的行为。

我知道 JUnit 可能提供了这个功能,但我不知道如何使用它(我将很快学习)并且需要相当快地做到这一点。

HTTPServletRequest 和 HTTPServletResponse 都是接口,所以它们不能被实例化。有一个 HttpServletRequestWrapper 实现了 HttpServletRequest 但它似乎没有任何 setParameter() 类型的方法,而 HttpServletResponse 似乎根本没有任何实现类。

如何通过传递合适的 HttpServletRequest 对象然后检查收到的 HttpServletResponse 对象是否符合我的预期来测试我的代码?

【问题讨论】:

    标签: java servlets


    【解决方案1】:

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

    class MyHttpServletRequest implements HttpServletRequest
    {
      //whatever
    }
    
    class MyHttpServletResponse implements HttpServletResponse
    {
      //whatever
    }
    
    
    doGet(new MyHttpServletRequest(),
          new MyHttpServletResponse())
    

    子类化 HttpServletRequestWrapper 可能更容易,但这不是必需的。我会看看覆盖 getParametergetParameterMap

    【讨论】:

    • 好的,谢谢……这也让我对接口的意义有了更好的理解。
    【解决方案2】:

    创建一个虚拟对象:

    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 的可用 mocking 库之一,例如 Mockito。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多