2010-05-20 83 views
0

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

我知道JUnit可能提供了这种功能,但我不知道如何使用它(我将很快学会)并需要相当快地完成此操作。

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

我该如何测试我的代码,方法是先传递一个合适的HttpServletRequest对象,然后检查接收到的对象是否与我期望的匹配?

回答

2

事实上,它是一个接口,使得它更容易模仿:它嘲笑最终类很棘手。

class MyHttpServletRequest implements HttpServletRequest 
{ 
    //whatever 
} 

class MyHttpServletResponse implements HttpServletResponse 
{ 
    //whatever 
} 


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

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

+1

好的,谢谢...,这也让我更好地理解接口的点。 – Ankur 2010-05-20 03:46:26

1

创建虚拟对象:

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; 
    } 
} 

如果你想避免创建测试用假人的对象,你可以看看可用mocking库为Java,如一个的Mockito。