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

--> 本页主题: JUnit Gossip: 第一個 Cactus + Jetty 測試 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
Fastpoint


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

JUnit Gossip: 第一個 Cactus + Jetty 測試

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





在Tomcat或您的目標Container上直接執行測試的好處是,您即完成了單元測試,也測試了您的單元與 Container的交互,然而比較麻煩的是,您必須在每一次的修改之後,重新佈署相關的資源、啟動Container、運行測試等等,測試時較為耗時耗力。

對於簡單的In-Container單元測試,您可以使用stub的方式,stub即將真實系統的一部份引入您的程式之中,讓您的程式可以與這一個部份進行交互,而不一定要將整個程式置於系統之中。

stub的好處是,有時您並不是要測試程式與整個系統的行為,並且您也不是每次都可以將程式丟到系統之上運行,試想,您不能為了測試您的單元,而要求真正在服務客戶的系統不斷的重啟。

對於In-Container測試採取stub的方式,自然就是實現Container的部份功能,並將測試置於其中,在這邊您可以使用 Jetty [http://jetty.mortbay.org/jetty/index.html],它是個Java撰寫的HTTP伺服器,本身也是個 Container,Cactus集成了Jetty,並提供與測試相關的簡便類別。

使用Cactus+Jetty執行測試,在更大的程度上隱藏了測試運行過程的細節,您不必關心Redirector Proxy,更不一定要關心TestCase在客戶端與伺服端的行為,運行起來就如同在運作一個JUnit測試。

使用Cactus+Jetty進行測試時,Jetty會在測試開始前完成啟動,接著進行相關測試,然後Jetty會自動關閉,這很方便,另一方面,啟動 Jetty會快的多了。

要使用Cactus+Jetty,請將Cactus下載後的lib目錄中的commons-logging-xxx.jar、 aspectjrt-xxx.jar、cactus-xxx.jar、commons-httpclient-xxx.jar、junit- xxx.jar以及org.mortbay.jetty-xxx.jar設定至CLASSPATH。

接著撰寫測試案例:

LoginServletTest.java package onlyfun.caterpillar.test;

import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import org.apache.cactus.extension.jetty.JettyTestSetup;

import onlyfun.caterpillar.LoginServlet;
public class LoginServletTest extends ServletTestCase {
  public static Test suite() {
    System.setProperty("cactus.contextURL",
              "http://localhost:8080/cactusDemo");
    TestSuite suite = new TestSuite();
    suite.addTestSuite(LoginServletTest.class);
    return new JettyTestSetup(suite);
  }
 
  public void beginValidUser(WebRequest webRequest) {
    webRequest.addParameter("username", "justin");
    webRequest.addParameter("password", "123456");
  }
 
  public void testValidUser() {
    LoginServlet loginServlet = new LoginServlet();
    assertTrue(loginServlet.isValidUser(request));
  }
 
  public void beginInValidUser(WebRequest webRequest) {
    webRequest.addParameter("username", "guest");
    webRequest.addParameter("password", "123456");
  }
 
  public void testInValidUser() {
    LoginServlet loginServlet = new LoginServlet();
    assertFalse(loginServlet.isValidUser(request));
  }
 
  public static void main(String[] args) {
    junit.textui.TestRunner.run(
            LoginServletTest.suite());
  }
}


在這邊要特別注意的是suite()方法,傳回了一個JettyTestSetup實例,如您所想的,這個實例除了運行TestSuite之外,它還會啟動Jetty。接下來依測試案例來完成程式:

LoginServlet.java package onlyfun.caterpillar;

import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
  public boolean isValidUser(HttpServletRequest request) {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if(username == null ||
      password == null ||
      !username.equals("justin") ||
      !password.equals("123456")) {
        return false;
    }
    else {
        return true;
    }
  }
}


然後就可以運行測試了,以下是測試的結果:

09:26:10.625 EVENT Starting Jetty/4.2.17
09:26:10.843 EVENT Started ServletHttpContext[/cactusDemo]
09:26:39.203 EVENT Started SocketListener on 0.0.0.0:8080
09:26:39.203 EVENT Started org.mortbay.jetty.Server@758fc9
..09:26:40.296 EVENT Stopping Acceptor
ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080]
09:26:40.296 EVENT Stopped SocketListener on 0.0.0.0:8080
09:26:40.296 EVENT Stopped ServletHttpContext[/cactusDemo]
09:26:40.296 EVENT Stopped org.mortbay.jetty.Server@758fc9
Time: 31.453
OK (2 tests)

如您所看到的,整個測試過程相當的簡易,Cactus+Jetty隱藏了更多的細節,您測試的行為幾乎與只使用JUnit時是一致的。


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

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

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


该用户目前不在线
级别: Cntesting老学员
精华: 0
发帖: 90
基地声望: 9 点
基地币: 235 Bug
基地贡献: 0 点
好评度: 0 点
在线时间:53(小时)
注册时间:2006-07-16
最后登录:2007-02-28
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



良葛格啊,呵呵,我们教材的一部分就是参考他的java笔记写的

开杂货店是我的兴趣,教拳才是我的正业。同时我这个人呢,淡泊名利最讨厌别人沽名钓誉了!
[1 楼] | Posted: 2006-10-27 21:36 顶端

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




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

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


每日一句:Loading...