参照书上一个例子学习,其中书上用JUnit测试:测试注册的代码:public void testInsert() throws Exception{
  User record = new User();
  record.setUsername("test");
  record.setPassword("test");
......
  userService.register(record);
  assertTrue(userService.isExist("test"));
}
我模仿他的方法,测试我原先一个用servlet实现的代码,也插入功能。
但是以前的项目方法:public void select(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
.......
}
所以测试的方法我写的是:
public void testSelect()throws Exception{
assertTrue(goodsService.select(request, response));
}现在测试方法中的参数报错,这种带参数的该怎么写呢

解决方案 »

  1.   

    寫Servlet測試案例,您可以繼承ServletTestCase,這些在之前的主題上都有說明過了,如果您需要Container所管理的一些資源物件,可以直接使用ServletTestCase所提供的隱含物件(實際上就是field成員)。
    request 
    相當於HttpServletRequest物件,實際上是繼承它的子類 org.apache.cactus.server.HttpServletRequestWrapper,這個類包裝了 HttpServletRequest,除了HttpServletRequest本身的方法之外,還提供了setRemoteIPAddress()、 setRemoteHostName()、setRemoteUser()等方法。response 
    為HttpServletResponse物件,Cactus對於HttpServletResponse不作任何的包裝。config 
    相當於ServletConfig,實際上是繼承它的子類 org.apache.cactus.server.ServletConfigWrapper,提供了setInitParameter()、 setServletName()等簡便的方法,讓您不用透過設定web.xml就可以作一些Servlet的設定動作。session 
    即HttpSession物件,Cactus不為HttpSession作任何的包裝, Cactus預設上會自動生成HttpSession物件,您可以在beginXXX()中使用 WebRequest.setAutomaticSession(false)來取消,這樣您就可以自己透過request的getSession()方法來控制session。
    您可以透過config.getServletContext()來取得ServletContext物件,而實際上返回的是它的子類 org.apache.cactus.server.ServletContextWrapper,它提供了getLogs()方法可以讓您取得 ServletContext.log()所記錄的文字,還有setInitParameter()可以讓您設定context參數,即實際佈署 Servlet時要於web.xml的<context-param>中設定的參數。