5.2.3 測(cè)試Servlet的內(nèi)部行為
對(duì)于開發(fā)者來說,僅僅測(cè)試請(qǐng)求和返回信息是不夠的,所以HttpUnit提供的 ServletRunner模擬器可以讓你對(duì)被調(diào)用Servlet內(nèi)部的行為進(jìn)行測(cè)試。和簡(jiǎn)單測(cè)試中不同,這里使用了InvocationContext 獲得該Servlet的環(huán)境,然后你可以通過InvocationContext對(duì)象針對(duì)request、response等對(duì)象或者是該Servlet 的內(nèi)部行為(非服務(wù)方法)進(jìn)行操作。
下面的代碼演示了如何使用HttpUnit模擬Servlet容器,并且通過InvocationContext對(duì)象,測(cè)試Servlet內(nèi)部行為的大部分工作,比如控制request、session、response等。
// 創(chuàng)建Servlet的運(yùn)行環(huán)境
ServletRunner sr = new ServletRunner();
// 向環(huán)境中注冊(cè)Servlet
sr.registerServlet( "InternalServlet", InternalServlet.class.getName() );
// 創(chuàng)建訪問Servlet的客戶端
ServletUnitClient sc = sr.newClient();
// 發(fā)送請(qǐng)求
WebRequest request = new GetMethodWebRequest( "http://localhost/InternalServlet" );
request.setParameter("pwd","pwd");
// 獲得該請(qǐng)求的上下文環(huán)境
InvocationContext ic = sc.newInvocation( request );
// 調(diào)用Servlet的非服務(wù)方法
InternalServlet is = (InternalServlet)ic.getServlet();
is.myMethod();
// 直接通過上下文獲得request對(duì)象
System.out.println("request中獲取的內(nèi)容:"+ic.getRequest().getParameter("pwd"));
// 直接通過上下文獲得response對(duì)象,并且向客戶端輸出信息
ic.getResponse().getWriter().write("haha");
// 直接通過上下文獲得session對(duì)象,控制session對(duì)象
// 給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、總結(jié)
1. 模擬用戶行為向服務(wù)器發(fā)送請(qǐng)求,傳遞參數(shù)
2. 模擬用戶接受服務(wù)器的響應(yīng)信息,并且通過輔助類分析這些響應(yīng)信息,結(jié)合JUnit框架進(jìn)行測(cè)試
3. 使用HttpUnit提供的模擬Servler容器,測(cè)試開發(fā)中的Servlet的內(nèi)部行為