3.6、JUnit一個實例
在控制臺中簡單的范例如下:
1、寫個待測試的Triangle類,創建一個TestCase的子類ExampleTest:
2、 ExampleTest中寫一個或多個測試方法,斷言期望的結果(注意:以test作為待測試的方法的開頭,這樣這些方法可以被自動找到并被測試)
3、 ExampleTest中寫一個suite()方法,它會使用反射動態的創建一個包含所有的testXxxx方法的測試套件:
4、 ExampleTest可以寫setUp()、tearDown()方法,以便于在測試時初始化或銷毀測試所需的所有變量和實例。(不是必須的)
5、寫一個main()方法以文本運行器或其它GUI的方式方便的運行測試
6、編譯ExampleTest,執行測試。
3.7、Eclipse中JUnit的使用
Eclipse自帶了一個JUnit的插件,不用安裝就可以在你的項目中開始測試相關的類,并且可以調試你的測試用例和被測試類。
使用步驟如下:
1、新建一個測試用例,點擊“File->New->Other…菜單項,在彈出的“New”對話框中選擇”Java->JUnit”,下的TestCase 或TestSuite,就進入“New JUnit TestCase”對話框
2、在“New JUnit TestCase”對話框填寫相應的欄目,主要有Name(測試用例名),SuperClass(測試的超類一般是默認的junit.framework.TestCase),Class Under Test(被測試的類),Source Folder(測試用例保存的目錄),Package(測試用例包名),及是否自動生成main,setUp,tearDown方法。
3、如果點擊下面的”Next>”按鈕,你還可以直接勾選你想測試的被測試類的方法,Eclipse將自動生成與被選方法相應的測試方法,點擊“Fishish”按鈕后一個測試用例就創建好了。
4、編寫完成你的測試用例后,點擊“Run”按鈕就可以看到運行結果了。
3.8、JUnit的擴展應用
以下羅列了些JUnit的擴展應用:
JUnit + HttpUnit=WEB功能測試工具
JUnit + hansel =代碼覆蓋測試工具
JUnit + abbot =界面自動回放測試工具
JUnit + dbunit =數據庫測試工具
JUnit + junitperf=性能測試工具
3.9、一些使用JUnit經驗
不要用TestCase的構造函數初始化,而要用setUp()和tearDown()方法。
不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法。所以不同的平臺會按不同的順序從Vector中取出測試方法。
避免編寫有副作用的TestCase。例如:如果隨后的測試依賴于某些特定的交易數據,就不要提交交易數據。簡單的回滾就可以了。
當繼承一個測試類時,記得調用父類的setUp()和tearDown()方法。
將測試代碼和工作代碼放在一起,一邊同步編譯和更新。
測試類和測試方法應該有一致的命名方案。如在工作類名前加上test從而形成測試類名。
確保測試與時間無關,不要依賴使用過期的數據進行測試。導致在隨后的維護過程中很難重現測試。
如果你編寫的軟件面向國際市場,編寫測試時要考慮國際化的因素。不要僅用母語的Locale進行測試。
盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡潔。
測試要盡可能地小,執行速度快。
參考資料與附件
1. http:// www.junit.org JUnit官方網站
2. http://bbs.51cmm.com 的測試論壇
3. http://www.uml.org.cn 的軟件測試專欄
4. 單元測試 《程序員》 2002年7期
5. JUnit設計模式分析 《程序員》2003年6期
6. 《軟件測試和JUnit實踐》
7. 附件Triangle.java 一個要測試的類
Triangle.java
/**
* this is Triangle class
* @author liujun
*/
public class Triangle
{
//定義三角形的三邊
protected long lborderA = 0;
protected long lborderB = 0;
protected long lborderC = 0;
?
//構造函數
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 一個測試用例類
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);
}
//函數isTriangle()的測試用例
public void testIsTriangle() {
assertTrue(triangle.isTriangle(triangle));
}
//函數isType()的測試用例
public void testIsType()
{
assertEquals("這次測試",triangle.isType(triangle),"不等邊三角形");
}
?
//執行測試
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)
評論(0) 編輯 收藏 所屬分類:
軟件測試技術