3.6、JUnit一個(gè)實(shí)例
在控制臺(tái)中簡(jiǎn)單的范例如下:
1、寫個(gè)待測(cè)試的Triangle類,創(chuàng)建一個(gè)TestCase的子類ExampleTest:
2、 ExampleTest中寫一個(gè)或多個(gè)測(cè)試方法,斷言期望的結(jié)果(注意:以test作為待測(cè)試的方法的開頭,這樣這些方法可以被自動(dòng)找到并被測(cè)試)
3、 ExampleTest中寫一個(gè)suite()方法,它會(huì)使用反射動(dòng)態(tài)的創(chuàng)建一個(gè)包含所有的testXxxx方法的測(cè)試套件:
4、 ExampleTest可以寫setUp()、tearDown()方法,以便于在測(cè)試時(shí)初始化或銷毀測(cè)試所需的所有變量和實(shí)例。(不是必須的)
5、寫一個(gè)main()方法以文本運(yùn)行器或其它GUI的方式方便的運(yùn)行測(cè)試
6、編譯ExampleTest,執(zhí)行測(cè)試。
3.7、Eclipse中JUnit的使用
Eclipse自帶了一個(gè)JUnit的插件,不用安裝就可以在你的項(xiàng)目中開始測(cè)試相關(guān)的類,并且可以調(diào)試你的測(cè)試用例和被測(cè)試類。
使用步驟如下:
1、新建一個(gè)測(cè)試用例,點(diǎn)擊“File->New->Other…菜單項(xiàng),在彈出的“New”對(duì)話框中選擇”Java->JUnit”,下的TestCase 或TestSuite,就進(jìn)入“New JUnit TestCase”對(duì)話框
2、在“New JUnit TestCase”對(duì)話框填寫相應(yīng)的欄目,主要有Name(測(cè)試用例名),SuperClass(測(cè)試的超類一般是默認(rèn)的junit.framework.TestCase),Class Under Test(被測(cè)試的類),Source Folder(測(cè)試用例保存的目錄),Package(測(cè)試用例包名),及是否自動(dòng)生成main,setUp,tearDown方法。
3、如果點(diǎn)擊下面的”Next>”按鈕,你還可以直接勾選你想測(cè)試的被測(cè)試類的方法,Eclipse將自動(dòng)生成與被選方法相應(yīng)的測(cè)試方法,點(diǎn)擊“Fishish”按鈕后一個(gè)測(cè)試用例就創(chuàng)建好了。
4、編寫完成你的測(cè)試用例后,點(diǎn)擊“Run”按鈕就可以看到運(yùn)行結(jié)果了。
3.8、JUnit的擴(kuò)展應(yīng)用
以下羅列了些JUnit的擴(kuò)展應(yīng)用:
JUnit + HttpUnit=WEB功能測(cè)試工具
JUnit + hansel =代碼覆蓋測(cè)試工具
JUnit + abbot =界面自動(dòng)回放測(cè)試工具
JUnit + dbunit =數(shù)據(jù)庫(kù)測(cè)試工具
JUnit + junitperf=性能測(cè)試工具
3.9、一些使用JUnit經(jīng)驗(yàn)
不要用TestCase的構(gòu)造函數(shù)初始化,而要用setUp()和tearDown()方法。
不要依賴或假定測(cè)試運(yùn)行的順序,因?yàn)镴Unit利用Vector保存測(cè)試方法。所以不同的平臺(tái)會(huì)按不同的順序從Vector中取出測(cè)試方法。
避免編寫有副作用的TestCase。例如:如果隨后的測(cè)試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù)。簡(jiǎn)單的回滾就可以了。
當(dāng)繼承一個(gè)測(cè)試類時(shí),記得調(diào)用父類的setUp()和tearDown()方法。
將測(cè)試代碼和工作代碼放在一起,一邊同步編譯和更新。
測(cè)試類和測(cè)試方法應(yīng)該有一致的命名方案。如在工作類名前加上test從而形成測(cè)試類名。
確保測(cè)試與時(shí)間無關(guān),不要依賴使用過期的數(shù)據(jù)進(jìn)行測(cè)試。導(dǎo)致在隨后的維護(hù)過程中很難重現(xiàn)測(cè)試。
如果你編寫的軟件面向國(guó)際市場(chǎng),編寫測(cè)試時(shí)要考慮國(guó)際化的因素。不要僅用母語的Locale進(jìn)行測(cè)試。
盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡(jiǎn)潔。
測(cè)試要盡可能地小,執(zhí)行速度快。
參考資料與附件
1. http:// www.junit.org JUnit官方網(wǎng)站
2. http://bbs.51cmm.com 的測(cè)試論壇
3. http://www.uml.org.cn 的軟件測(cè)試專欄
4. 單元測(cè)試 《程序員》 2002年7期
5. JUnit設(shè)計(jì)模式分析 《程序員》2003年6期
6. 《軟件測(cè)試和JUnit實(shí)踐》
7. 附件Triangle.java 一個(gè)要測(cè)試的類
Triangle.java
/**
* this is Triangle class
* @author liujun
*/
public class Triangle
{
//定義三角形的三邊
protected long lborderA = 0;
protected long lborderB = 0;
protected long lborderC = 0;
?
//構(gòu)造函數(shù)
public Triangle(long lborderA,long lborderB,long lborderC)
{
this.lborderA = lborderA;
this.lborderB = lborderB;
this.lborderC = lborderC;
}
/**
* 判斷是否是三角形
* 是返回ture;不是返回false
*/
public boolean isTriangle(Triangle triangle)
{
boolean isTrue = false;
//判斷邊界,大于0小于200,出界返回false
if((triangle.lborderA>0&&triangle.lborderA<200)
&&(triangle.lborderB>0&&triangle.lborderB<200)
&&(triangle.lborderC>0&&triangle.lborderC<200))
{
//判斷兩邊之和大于第三邊
if((triangle.lborderA<(triangle.lborderB+triangle.lborderC))
&&(triangle.lborderB<(triangle.lborderA+triangle.lborderC))
&&(triangle.lborderC<(triangle.lborderA+triangle.lborderB)))
isTrue = true;
}
return isTrue;
}
?
/**
* 判斷三角形類型
* 等腰三角形返回字符串“等腰三角形”;
* 等邊三角形返回字符串“等邊三角形”;
* 其它三角形返回字符串“不等邊三角形”;
*/
public String isType(Triangle triangle)
{
String strType = "";
// 判斷是否是三角形
if(this.isTriangle(triangle))
{
//判斷是否是等邊三角形 if(triangle.lborderA==triangle.lborderB&&triangle.lborderB==triangle.lborderC)
strType = "等邊三角形";
//判斷是否是不等邊三角形
else if((triangle.lborderA!=triangle.lborderB)&&
(triangle.lborderB!=triangle.lborderC)&&
(triangle.lborderA!=triangle.lborderC))
strType = "不等邊三角形";
else
strType="等腰三角形";
}
return strType;
}
}
8. 附件ExampleTest.java 一個(gè)測(cè)試用例類
ExampleTest.java
import junit.framework.*;
/**
* Some tests.
*
*/
public class ExampleTest extends TestCase {
public Triangle triangle;
//初始化
protected void setUp() {
triangle=new Triangle(10,2,9);
}
?
public static Test suite() {
return new TestSuite(ExampleTest.class);
}
//函數(shù)isTriangle()的測(cè)試用例
public void testIsTriangle() {
assertTrue(triangle.isTriangle(triangle));
}
//函數(shù)isType()的測(cè)試用例
public void testIsType()
{
assertEquals("這次測(cè)試",triangle.isType(triangle),"不等邊三角形");
}
?
//執(zhí)行測(cè)試
public static void main (String[] args) {
//文本方式
junit.textui.TestRunner.run(suite());
//Swingui方式
//junit.swingui.TestRunner.run(suite().getClass());
//awtui方式
//junit.awtui.TestRunner.run(suite().getClass());
?
}
}
posted on 2006-11-26 15:16
matthew 閱讀(483)
評(píng)論(0) 編輯 收藏 所屬分類:
軟件測(cè)試技術(shù)