您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > Cactus
用Cactus來測(cè)試J2ee應(yīng)用
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/11/29 14:52:41 ] 推薦標(biāo)簽:

public void testAddUser() throws javax.ejb.EJBException{
servlet.addUser(request,response) ;
}
public void testFindAll(){
java.util.Iterator i=servlet.findAll() ;
//assertEquals(null,i);
boolean ok=false;
while(i.hasNext() ){
if(((User)i.next()).getName().equals("nameValue")) {
ok=true;
};
}
this.assertTrue(ok) ;
}
public void testFindByName() throws javax.ejb.EJBException {
User u=servlet.findByName("nameValue") ;
UserInfo ui=u.getUserInfo() ;
this.assertEquals("email",ui.getEmail()) ;
this.assertEquals("tel",ui.getTel()) ;
this.assertEquals("nameValue",u.getName()) ;
this.assertEquals("passValue",u.getPassword()) ;

}

public void testDel() throws javax.ejb.EJBException {

servlet.delUser("nameValue8") ;

}
public void testDelAll() throws javax.ejb.EJBException {
servlet.delAll() ;
}

public static void main(String[] theArgs)
{
junit.textui.TestRunner.main(new String[]{
ManaServletTest.class.getName()});
}
public static Test suite()
{

return new TestSuite(ManaServletTest.class);
}

}

public class ManaServletTest extends ServletTestCase 我們要測(cè)試的是一個(gè)servlet,所以我們繼承ServletTestCase,如果你測(cè)試jsp的話,繼承JspTestCase.

public ManaServletTest(String theName) {
super(theName);
}

和junit一下,ServletTestCase不允許使用默認(rèn)的構(gòu)造函數(shù),所以必須使用一個(gè)帶參數(shù)的構(gòu)造函數(shù),并且調(diào)用 父類的構(gòu)造函數(shù)。

public void setUp(){

try {
servlet.init() ;
}
catch (ServletException ex) {
ex.printStackTrace() ;
this.fail() ;
}
}
public void tearDown(){

}

setUp是在測(cè)試類運(yùn)行時(shí)候首先被調(diào)用的辦法,在這里可以進(jìn)行一些數(shù)據(jù)初始化之類的工作。在這里我們調(diào)用了 servlet.init().

在測(cè)試類運(yùn)行的時(shí)候需要顯式的調(diào)用servlet的init()方法。因?yàn)閏actus在測(cè)試servlet的時(shí)候是實(shí)例化一個(gè)ser vlet的,不會(huì)調(diào)用inti(),而servlet enginer在調(diào)用的時(shí)候是會(huì)自動(dòng)調(diào)用servlet的init()方法的。tearDown方 法在測(cè)試完成的時(shí)候運(yùn)行,進(jìn)行一些必要的數(shù)據(jù)處理,比如刪除一些測(cè)試數(shù)據(jù)等,這里我們沒有做任何工作。

public void beginAddUser(WebRequest theRequest)
{
theRequest.addParameter("name", "nameValue");
theRequest.addParameter("pass","passValue") ;
theRequest.addParameter("tel","telValue") ;
theRequest.addParameter("address","addressValue") ;
theRequest.addParameter("email","emailValue");

}
public void testAddUser() throws javax.ejb.EJBException{
servlet.addUser(request,response) ;
}

在Cactus中,你需要用testXXX來命名你的方法,這樣Cactus會(huì)自動(dòng)調(diào)用這個(gè)方法進(jìn)行測(cè)。而BeingXXX則是在調(diào) 用test方法之前調(diào)用,也是說在一個(gè)功能測(cè)試之前運(yùn)行。這里我們現(xiàn)在beginAddUser中添加一些必要的參數(shù) 。WebRequest是Cactus提供的一個(gè)類,它允許你設(shè)置一些Http參數(shù),如果你使用了 theRequest.addParameter("name","nameValue"),那么在servlet中你可以用request.getParameter("name") 來取得name的值。當(dāng)然還可以設(shè)置Cookie,Http Head參數(shù)。在testAddUser()方法中我們測(cè)試addUser方法,如 果測(cè)試有異常,則會(huì)產(chǎn)生EJBException,得到一個(gè)測(cè)試失敗。

public void testFindByName() throws javax.ejb.EJBException {
User u=servlet.findByName("nameValue") ;
UserInfo ui=u.getUserInfo() ;
this.assertEquals("email",ui.getEmail()) ;
this.assertEquals("tel",ui.getTel()) ;
this.assertEquals("nameValue",u.getName()) ;
this.assertEquals("passValue",u.getPassword()) ;

}

這個(gè)測(cè)試是測(cè)試根據(jù)用戶名查找用戶,之后你可以用assertEquals方法來測(cè)試返回的值是否正確。

public static void main(String[] theArgs)
{
junit.textui.TestRunner.main(new String[]{
ManaServletTest.class.getName()});
}

這里我們使用textui來運(yùn)行我們的測(cè)試類,提供文本的測(cè)試信息,還有一個(gè)Swing的測(cè)試方法,一共一個(gè)界面, 但是沒有什么太大的意義。

到此我們介紹了所有的主要方法。后我們談?wù)勅绾芜\(yùn)行這個(gè)測(cè)試。

首先下載Cactus。
把lib/下的jar文件加入到 web app的lib下。以及你客戶端的classpath中,這是保險(xiǎn)的,雖然不是所有 的jar都用的著。
設(shè)置你的Cactus.找到cactus.properties 文件,把它加入到客戶端的classpath中。
修改cactus.properties 文件,把http://localhost:8080/test改成你相應(yīng)的設(shè)置,test是你web應(yīng)用的 名稱。其他設(shè)置可以不變。
修改服務(wù)器端web應(yīng)用的配置,在web.xml中加入:
<?xml version="1.0" encoding="ISO-8859-1"?>
<filter>
<filter-name>FilterRedirector</filter-name>
<filter-class>org.apache.cactus.server.FilterTestRedirector</filter-class>
</filter>

<filter-mapping>
<filter-name>FilterRedirector</filter-name>
<url-pattern>/FilterRedirector</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>ServletRedirector</servlet-name>
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
</servlet>

<servlet>
<servlet-name>JspRedirector</servlet-name>
<jsp-file>/jspRedirector.jsp</jsp-file>
</servlet>

<servlet-mapping>
<servlet-name>ServletRedirector</servlet-name>
<url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>JspRedirector</servlet-name>
<url-pattern>/JspRedirector</url-pattern>
</servlet-mapping>

編譯ejb和servlet,把EJB文件的jar,和servlet的war文件打包成 ear文件。
發(fā)布你的ear文件到web application.
運(yùn)行本地的測(cè)試文件ManaServletTest.class
哈哈~~,終于完成了所有的工作,我們可以看看運(yùn)行結(jié)果,"哦,不",居然出現(xiàn)了一個(gè)Error,那是你的程序出現(xiàn)了問題,仔細(xì)看看吧,測(cè)試是不會(huì)騙你的 :) 。 以上代碼在 win2000+JBOSS3.0+MySql MAX 3.24+Cactus1.3上運(yùn)行成功。

上一頁(yè)12345下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd