5.2.3 測試Servlet的內部行為
對于開發者來說,僅僅測試請求和返回信息是不夠的,所以HttpUnit提供的 ServletRunner模擬器可以讓你對被調用Servlet內部的行為進行測試。和簡單測試中不同,這里使用了InvocationContext 獲得該Servlet的環境,然后你可以通過InvocationContext對象針對request、response等對象或者是該Servlet 的內部行為(非服務方法)進行操作。
下面的代碼演示了如何使用HttpUnit模擬Servlet容器,并且通過InvocationContext對象,測試Servlet內部行為的大部分工作,比如控制request、session、response等。
// 創建Servlet的運行環境
ServletRunner sr = new ServletRunner();
// 向環境中注冊Servlet
sr.registerServlet( "InternalServlet", InternalServlet.class.getName() );
// 創建訪問Servlet的客戶端
ServletUnitClient sc = sr.newClient();
// 發送請求
WebRequest request = new GetMethodWebRequest( "http://localhost/InternalServlet" );
request.setParameter("pwd","pwd");
// 獲得該請求的上下文環境
InvocationContext ic = sc.newInvocation( request );
// 調用Servlet的非服務方法
InternalServlet is = (InternalServlet)ic.getServlet();
is.myMethod();
// 直接通過上下文獲得request對象
System.out.println("request中獲取的內容:"+ic.getRequest().getParameter("pwd"));
// 直接通過上下文獲得response對象,并且向客戶端輸出信息
ic.getResponse().getWriter().write("haha");
// 直接通過上下文獲得session對象,控制session對象
// 給session賦值
ic.getRequest().getSession().setAttribute("username","timeson");
// 獲取session的值
System.out.println("session中的值:"+ic.getRequest().getSession().getAttribute("username"));
// 使用客戶端獲取返回信息,并且打印出來
WebResponse response = ic.getServletResponse();
System.out.println(response.getText());
6、總結
1. 模擬用戶行為向服務器發送請求,傳遞參數
2. 模擬用戶接受服務器的響應信息,并且通過輔助類分析這些響應信息,結合JUnit框架進行測試
3. 使用HttpUnit提供的模擬Servler容器,測試開發中的Servlet的內部行為