2010-05-20 43 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。