任何一個程序員都知道單元測試的 重要性,沒有經過嚴格測試的模塊是“靠不住”的,組裝過程會出現越來越多的Bug,甚至到了客戶那裏都不能正常工作,這簡直就是一場災難。雖然每個程序員 都深刻的知道這點,但是很多時候在進度的壓力下,程序員不得不放棄部分甚至是全部的單元測試。特別是在我國現在的國情下,獻禮項目太多,建設方的領導爲了 在某個“有意義”的日子裏使項目上線,往往迫使軟件開發方違背客觀事實,在不可能的工期內完工。程序員作爲項目的最底層人員,自然沒有力量來進行反抗,當 他們加班加點都無法在規定時間完成,於是放棄測試就成爲了他們的唯一選擇。
很快這就成爲一個惡性循環:壓力越大,編寫的測試越少。編寫的測試越少,的效率越低,並且代碼越不穩定。而效率越低並且越不精確,開發人員就感覺越有壓力。
程序員的精力就在這樣的惡性循環中被耗費掉。想要打破它需要一種外界的影響。所謂的這種外界的影響,其實就是一個簡單的測試框架,它可以讓我們通過做很少的測試,來達到完整的測試,減少我們編寫測試代碼的時間。
2 NetBeans 5.0對單元測試的支持
NetBeans IDE 5.0 引入了對基於 NetBeans 平臺的 IDE 模塊和富客戶端程序開發的全面支持,直觀的全新 GUI Builder Matisse,經過重新設計的對 CVS 的新支持,對 Sun Application Server 8.2、Weblogic9 和 JBoss 4 的支持,以及很多的編輯器增強功能。同時集成了Java開發工具中應用最廣泛的單元測試工具Junit,使得在NetBeans下進行單元測試變得簡單容易,提高了程序員進行單元測試的積極性。
可以使用 NetBeans IDE 創建以下類型的測試:
空測試:沒有測試方法的測試框架,尚未指定要測試的任何類。
•現有類的測試:包含實際測試方法的類,這些方法鏡像了要測試的源的結構。
•測試套件:彙集在一起的幾組測試類,允許對整個應用程序或項目進行測試。
可以使用以下方法生成並找到測試:在“項目”窗口中選擇任何類或包節點,然後從“工具”> "JUnit" 菜單中進行選擇。NetBeans 將單元測試表示爲子樹,這些子樹反映了項目的 Java 包結構。每個測試類都由它所測試的類的名稱後Test 單詞組成(如 MyClassTest.java)。
每 個項目都有一個缺省的測試包,所有的測試文件都在測試包內被組織。程序文件與測試文件被分割成兩個獨立的部分,在項目下分爲一個SRC文件夾和一個 TEST文件夾,互相不產生影響,測試完成後,只需要將SRC文件夾單獨移開,並不需要TEST文件夾的支持。包結構如下圖:
3 被測試模塊的編寫
[NextPage]
新建一個Java類庫的項目,項目名稱爲:MoneyChange,新建包moneychange,在包中添加類Money.class。(爲了閱讀方便,下面代碼中原來的註釋已經被刪除)
package moneychange;
public class Money {
private int fAmount;
private String fCurrency;
public Money(int amount,String currency) {
fAmount=amount;
fCurrency=currency;
}
public int amount()
{
return fAmount;
}
public String currency()
{
return fCurrency;
}
public Money add(Money m)
{
return new Money(amount()+m.amount(),currency());
}
public boolean equals(Object anObject)
{
if(anObject instanceof Money)
{
Money aMoney=(Money)anObject;
return aMoney.currency().equals(currency())
&& amount()==aMoney.amount();
}
return false;
}
}
該類有兩個私有屬性fAmount和fCurrency,構造函數在對類進行初始化的時候,對兩個私有屬性進行了賦值。Add方法對兩個Money對象的 現金(fAmount)進行相加,equals方法對兩個Money對象的現金及貨幣單位進行比較是否相等。
4 創建單元測試
在項目窗口中的類Money.class上鼠標右鍵單擊,在彈出的菜單中選擇“工具”,並在子菜單中選擇“創建Junit測試”,如下圖所示: