» 您尚未 登录   注册 | 社区服务 | FTP中心 | 帮助 | 社区 | 无图版 | 测试百科  | 测试Blog 
软件测试基地论坛 -> 测试开发技术 -> JUnit Gossip: 測試 JSP
 XML   RSS 2.0   WAP 

--> 本页主题: JUnit Gossip: 測試 JSP 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
Fastpoint


该用户目前不在线
级别: 总版主
精华: 44
发帖: 5033
基地声望: 390 点
基地币: 1689 Bug
基地贡献: 0 点
好评度: 15 点
在线时间:818(小时)
注册时间:2005-10-08
最后登录:2008-07-22
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

JUnit Gossip: 測試 JSP

良葛格   大家通过 http://caterpillar.onlyfun.net/Gossip/index.html 找到他





雖然JSP會轉譯為Servlet,但所謂的對JSP測試,並不是對轉譯後的Servlet進行測試,因為我們無法對JSP進行特定的方法呼叫,另一方面,在 Model 2 架構中,JSP是擔任視圖呈現的職責,所以對JSP進行測試,通常指的是針對沒有Scriptlet,只有標籤的JSP頁面進行測試,測試的內容通常會是傳回的頁面結果。

(對Scriptlet的測試技術也是可行的,您可以將結果儲存在request、session中,然後在測試案例中取出進行斷言,但原則上不不鼓勵在 JSP中撰寫Scriptlet。)

舉個例子來看看如何對JSP頁面進行測試,假設現在使用者的請求經過了驗證,並可以轉發至使用者歡迎頁面,這個頁面是置於WEB- INF/pages/welcome.jsp,只有經過驗證(通常是經過Servlet)的請求能可以藉由轉發到該歡迎頁面,而歡迎頁面會顯示 request中的使用者名稱。

ValidUserPageTest.java package onlyfun.caterpillar.test;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebResponse;
public class ValidUserPageTest extends ServletTestCase {
  public void testWelcomePage()
              throws ServletException, IOException {
    request.setAttribute("validUser", "caterpillar");
    RequestDispatcher rd = request.getRequestDispatcher(
              "/WEB-INF/pages/welcome.jsp");
   
    rd.forward(request, response);
  }
 
  public void endWelcomePage(WebResponse webResponse) {
    assertTrue(webResponse.getText().indexOf
              ("<h1>Hello!caterpillar!<h1>") > 0);
  }
}

在測試案例中,假設經過驗證後,驗證程式會在request中放入一個"validUser"的屬性,內容值為使用者名稱,接下來驗證程式會轉發至 "WEB-INF/pages/welcome.jsp",您在endXXX()中驗證傳回的response訊息中,是曾是含有使用者名稱 "caterpillar",按照測試案例,您撰寫"welcome.jsp"的內容如下:

welcome.jsp <html>
<body>
    <h1>Hello!${validUser}!<h1>
</body>
</html>

您將使用Tomcat進行測試,請參考 第一個 Cactus + Tomcat 測試 瞭解如何設定,以下是測試的結果:


您也可以讓測試案例繼承JspTestCase,這可以讓您方便的使用JSP中的隱含物件來撰寫測試,例如上面的測試案例也可以寫成:

ValidUserPageTest.java package onlyfun.caterpillar.test;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.cactus.JspTestCase;
import org.apache.cactus.WebResponse;
public class ValidUserPageTest extends JspTestCase {
  public void testWelcomePage()
              throws ServletException, IOException {
    request.setAttribute("validUser", "caterpillar");
    pageContext.forward("/WEB-INF/pages/welcome.jsp");
  }
 
  public void endWelcomePage(WebResponse webResponse) {
    assertTrue(webResponse.getText().indexOf(
                "<h1>Hello!caterpillar!<h1>") > 0);
  }
}

為了能使用JSP相關的隱含物件,您必須將jsp-api.jar設置至CLASSPATH中,另外JspTestCase需要 JspRedirector,您要將Cactus目錄下的web/jspRedirector.jsp複製至您的Web應用程式目錄下,並在 web.xml中加上定義:

web.xml ...
  <servlet>
    <servlet-name>JspRedirector</servlet-name>
    <jsp-file>/jspRedirector.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>JspRedirector</servlet-name>
    <url-pattern>/JspRedirector</url-pattern>
  </servlet-mapping>
...

實際上的JSP頁面傳回結果可能複雜許多,您可以一個個加上測試,然後一個個加上同一個上的傳回結果斷言,在更複雜的頁面傳回結果分析中,您可以使用 HttpUnit 進行傳回的結果分析,視測試的程度而言,您所作的可能接近於功能單元測試(Functional Unit Test)了。


可不可不要这么样徘徊在目光内
你会察觉到我根本寂寞难耐
即使千多百个深夜曾在梦境内
我有吻过你这毕竟并没存在

人声车声开始消和逝
无声挣扎有个情感奴隶
是我多么的想她
但我偏偏只得无尽叹谓

其实每次见你我也着迷
无奈你我各有角色范围
就算在寂寞梦内超出好友关系
唯在暗里爱你暗里着迷
无谓要你惹上各种问题
共我道别吧别让空虚使我越轨
[楼 主] | Posted: 2005-10-28 14:22 顶端
奥利弗




该用户目前不在线
级别: 测试新手
精华: 0
发帖: 1
基地声望: 1 点
基地币: 2109 Bug
基地贡献: 0 点
好评度: 0 点
在线时间:0(小时)
注册时间:2007-07-11
最后登录:2007-07-11
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

chinajsp--提供专业的jsp空间

专业高速JSP空间优惠活动进行中CHINAJSP 提供稳定高速的JSP空间及各种技术服务,
“专业成就品质,我们只做JSP空间!”所有JSP空间均支持MySql和SQLServer2000数据库,
网通/电信/双线空间,彻底解决南北互联互通.“技术领先,倾情服务”是我们的服务理念.
www.chinajsp.com
QQ:275909069
MSN:chinajspsupport@hotmail.com
联系电话:024-25643740-801

[1 楼] | Posted: 2007-07-11 11:28 顶端

软件测试基地论坛 -> 测试开发技术




软件测试基地上海测仕信息技术有限公司旗下网站
Copyright © 2005-2007 Cntesting.com, All Rights Reserved
沪ICP备06057721号

Powered by PHPWind Code © 2003-06 PHPWind
Total 0.170237(s) query 5, Time now is:12-05 12:49, Gzip disabled
You can contact us


每日一句:Loading...