JUnit和單元測試入門簡介之一
上一篇 / 下一篇 2009-02-15 21:21:49 / 個人分類:thinking in testing
1 .單元測試概述
單元測試——是最小粒度的測試,以測試某個功能或代碼塊。一般由程序員來做,因為它需要知道內部程序設計和編碼的細節。
1.1. 單元測試的好處
A、提高開發速度——測試是以自動化方式執行的,提升了測試代碼的執行效率。
B、提高軟件代碼質量——它使用小版本發布至集成,便于實現人員除錯。同時引入重 構概念,讓代碼更干凈和富有彈性。
C、提升系統的可信賴度——它是回歸測試的一種。支持修復或更正后的“再測試”,可確保代碼的正確性。
1.2 單元測試的針對對象
A、面向過程的軟件開發針對過程。
B、面向對象的軟件開發針對對象。
C、可以做類測試,功能測試,接口測試(最常用于測試類中的方法)。
1.3 單元測試工具和框架
目前的最流行的單元測試工具是xUnit系列框架,常用的根據語言不同分為JUnit(java), CppUnit(C ),DUnit (Delphi ),NUnit(.net),PhpUnit(Php )等等。該測試框架的第一個和最杰出的應用就是由Erich Gamma (《設計模式》的作者)和Kent Beck(XP(Extreme Programming)的創始人 )提供的開放源代碼的JUnit。
2. 什么是JUnit及其特性
如果您要對編寫的程序進行測試,應該如何進行呢?傳統的測試方式是通過信賴人工對輸出結果的判斷,缺少效率且通常難以組織,且針對單一程序通常要設計專門的測試程序,如果您是在編寫Java,您可以使用JUnit來為你提供有效的測試。
2.1. 什么是JUnit?
在這里引述一下JUnit FAQ中的解釋。
JUnit是一個開放原始碼的Java測試框架(testing framwork),它用來編寫與執行重復性的測試,它是用在單元測試框架的xUnit架構的貫例。
2.2. JUnit的好處
A、可以使測試代碼與產品代碼分開。
B、針對某一個類的測試代碼通過較少的改動便可以應用于另一個類的測試。
C、易于集成到測試人員的構建過程中,JUnit和Ant的結合可以實施增量開發。
D、JUnit是公開源代碼的,可以進行二次開發。
C、可以方便地對JUnit進行擴展。
2.3 JUnit單元測試編寫原則:
A、是簡化測試的編寫,這種簡化包括測試框架的學習和實際測試單元的編寫。
B、是使測試單元保持持久性。
C、是可以利用既有的測試來編寫相關的測試。
2.4 JUnit包括以下的特性:
A. 對預期結果的斷言
B. 對相同共享資料的測試組裝
C. 易于組織與執行測試的測試套件
D 圖形與文字界面的測試器
3. JUnit 的使用入門
現在很多Java開發工具都集成了JUnit,如MyEclipse,Netbean,JBuilder等等,你可以直接使用。當然你也可以在JUnit的官方網站上下載,網址是http://junit.org
我自己用的是MyEclipse6.6版本的java開發工具,JUnit是4.5版本,F在我們來寫一個java類,也就是被測試的類,然后用JUnit來進行單元測試。
首先,在MyEclipse中建一個java工程,我這里的工程名為javaproject2,引入JUnit4.5相關的jar文件,把環境搭建好。然后建立相應的包。這里應當注意,為了方便管理,我們的源代碼和測試代碼最好不要放在同一個代碼文件夾中的同一個包中。我們可以再建一個代碼文件夾test,并在其中建一個與源代碼文件夾(src)中的包名一致的包。這樣做的好處是源代碼和測試代碼雖然不在同一個文件夾,但它們的.class文件都在同一個文件夾中,實現了源代碼和測試代碼的分離,方便管理。
如圖1.0所示:
(圖1.0)
搭建好測試環境后,就可以進行相關類的編寫了。這里我設計了一個稅收類Revenue.java,放在src中的com.cuckoo2010包中。該類包含一個稅費計算的方法revenuemethod(double mymoney),方法具體的實現邏輯為:當個人收小于或等于800則不征稅,當個人收入大于800底于2000元時,征收百分之七的稅,當個人收入大于2000且底于5000元時,征收百分之十五的稅,當個人收入超過5000時,征收百分之二十五的稅。設定一個異常狀態,當輸入值等于或小于零時拋出一個異常。代碼如下:
package com.cuckoo2010;
/**
* 被測試的類 Revenue.java
* @author 松子煮茶
*/
public class Revenue {
private double money;
public double revenuemethod(double mymoney) throws Exception {
//個人收小于或等于800則不征稅
if (mymoney <= 800) {
return this.money = mymoney;
}
//個人收入大于800底于2000元時,征收百分之七的稅
else if (mymoney <= 2000) {
return this.money = mymoney - mymoney * 0.07;
}
//個人收入大于2000且底于5000元時,征收百分之十五的稅
else if (mymoney > 2000 && mymoney <= 5000) {
return this.money = mymoney - mymoney * 0.15;
}
//個人收入超過5000時,征收百分之二十五的稅
else if (mymoney > 5000) {
return this.money = mymoney - mymoney * 0.25;
}
else if (mymoney <= 0) {
/**
* 自定義異常
* 當金額小于或等于0時,系統拋出異常
*/
throw new Exception("金額不符合要求,必須大于零!");
}
return this.money;
}
}
寫完這個類后,我們可以根據這個類設計一個測試用例,也就是各種輸入值,預期值及實際值。
如表1.1所示:
表1.1
|
輸入值 |
預期值 |
實際值 | ||||||
正常測試數據 |
1.0 |
1.0 |
1.0 | ||||||
500.0 |
500.0 |
500.0 | |||||||
799.0 |
799.0 |
799.0 | |||||||
1999.0 |
1859.07 |
1859.07 | |||||||
2999.0 |
2549.15 |
2549.15 | |||||||
4999.0 |
4249.15 |
4249.15 | |||||||
5999.0 |
4499.25 |
4499.25 | |||||||
邊界測試數據 |
800.0 |
800.0 |
800.0 | ||||||
2000.0 |
1860.0 |
1860.0 | |||||||
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | ||||||
5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
26 | 27 | 28 | 29 | 30 |
我的存檔
數據統計
- 訪問量: 15062
- 日志數: 24
- 文件數: 7
- 建立時間: 2009-02-09
- 更新時間: 2011-02-18
清空Cookie - 聯系我們 - 軟件測試網 - 交流論壇 - 空間列表 - 站點存檔 - 升級自己的空間
Powered by X-Space
4.0.1 UC
© 2001-2008 Comsenz Inc.
京ICP備10010545號-5