From Gossip@caterpillar

JUnit Gossip: 測試 Servlet

撰寫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>中設定的參數。