Eclipse中建立自己的JUnit測試

2023-02-10 19:42:06 字數 3530 閱讀 5451

cnjsp

2005-3-27 20:33:00 文/rosen

這篇文章將向你介紹junit,乙個用來在專案中進行測試和除錯的工具。在介紹完tdd(以測試驅動開發)理論後,將進一步講解怎樣在流行的eclipse中建立你自己的junit測試。向你展示如何測試hello world這樣簡單的程式。

許多書上都討論了自動測試,但是只有很少的著作注意到這麼乙個問題,那就是怎樣把這些測試組織起來。隨著測試的增加,放置和呼叫這些測試卻變得更加麻煩。這將成為乙個重要問題,以至於出現了tdd,極限程式設計(xp)使tdd得以普及。

另外,你可以這樣理解tdd:通過測試來開發。

tdd的主要規範 :

在編寫程式**之前,與之對應的自動測試必須被寫好。甚至程式**並不存在,那也要看見乙個失敗的測試結果。

在測試通過後,副本**必須被丟棄。

有乙個具體步驟(可能指的是《extreme programming》)可以被任何乙個程式設計師來參考,而不需要特殊的其他方法。在我們開始寫測試之前,這些步驟(章節)應該被首先閱讀——怎樣組織自動測試。

講解一下不同種類的測試:

單元測試:檢測模組(也就是類)的正確性。如果物件需要訪問外部的資料資源,例如資料庫,就需要模擬乙個mock objects,但在實際中真實資料與測試環境是不同的。

客戶測試:這是功能性、系統、和驗收測試。用來測試整體的系統特性。在xp中,這些測試由使用者編寫。

綜合測試:介於使用者測試和單元測試之間的橋梁。綜合測試幫助測試應用程式的互動性。

一般情況下,mock objects不被用於綜合測試,它會增加測試時間。同樣,綜合測試經常依賴特殊的測試環境,例如資料庫送來的測試資料。綜合測試也需要用到外部類庫。

例如為j2ee應用程式進行綜合測試的類庫cactus。解釋這些測試超出了本文的範圍,需要更加詳細的資訊請參考

開發人員測試:這是用來讓開發人員檢驗自己**或新函式的。對於每乙個開發人員,只要有可能,就需要有更多的測試來檢驗**。組織這些測試和組織程式**一樣重要。

在以下章節,只要提到「測試」,那就指的是開發人員測試。

我們幾乎準備好開始建立測試了,先應該為我們的測試選擇名字。你也許會說,「這不是問題:把『test』這個字放在類名前面,就好了!

」不會這麼快!讓我來說一下這個步驟存在的問題:

在tdd中,被測試的類或者方法還不存在。

乙個測試能夠覆蓋多個方法,甚至多個類,這是可能的。

以上只是一些普遍問題;還存在更多的問題。

讓我來提乙個建議,在測試命名時:測試類的名字應該讓人一眼就知道這是乙個測試類,且能說明它要測試什麼,注意是否和其他類重名。按照以上建議做,就很簡單了,也不用擔心名字太長或難聽。

即將在eclipse中用junit工具建立我們第乙個測試了。假設你已經**了乙個最新的eclipse版本。如果還沒有,你應該去官方站點**。還需要junit,也可以從**。

執行eclipse。新建乙個workplace專案,點選檔案->新建->專案,選擇j**a專案,點選下一步。起乙個專案名稱,例如projectwithjunit。

點選完成。這樣就完成新專案的建立了。再來配置一下eclipse,在構建路徑中新增junit類庫。

在工具條上點選專案->屬性,選擇j**a構建路徑,庫,選擇新增外部jar,瀏覽junit被儲存的目錄,選擇點選開啟。你將會看見junit出現在庫的列表中。點選確定,讓eclipse重建路徑。

現在開發我們的「hello world」例子。按照tdd的規則,應該在**建立以前先把測試寫好。為了能夠在某齣開始,我們假設未來的類名是helloworld,並且有乙個方法say(),這個方法返回string的值(例如「hello world!

」)。建立測試,在projectwithjunit的標題上面點選右鍵,選擇新建->其他,展開「j**a」選項,選擇junit。在右邊的欄目對話方塊中選擇測試案例,然後下一步。參考圖1。

圖1. 在eclipse中建立junit測試

在測試類這一欄中,寫上將要被測試的類名helloworld。選擇乙個測試案例的名字,例如testthatwegethelloworldprompt(是的,看上去很長,但是很清楚它的行為。)點選完成。

testthatwegethelloworldprompt的**如下:

import

public class testthatwegethelloworldprompt

extends testcase

public void testsay()

public static void main(string args)

}  **並不複雜;只是有點與眾不同。然而,讓我們考察一下細節。我們繼承了junit的testcase類,它在junit的j**adocs定義為「執行眾多測試的夾具。

」junit也有testsuite類,它是一組測試案例的集合,但在本文中不做討論。

建立測試案例的步驟如下:

1、建立乙個的例項。

2、定義一些以「test」開頭的無返回方法(例如testwastransactionsuccessful(),testshow(),等等)。

包含這些:testcase的子類和乙個叫做testsay()的方法。這個方法呼叫了assertequals()函式,它用來比較我們預期的值和由say()返回的值。

main()方法用來執行測試和顯示輸出的。junit的testrunner處理測試,提供基於影象和文字的輸出表現形式。我們使用基於文字的版本,因為eclipse支援它,且也適合我們。

當開始執行後,基於文字的版本測試會以文字形式輸出,eclipse會把這些輸出自動變成影象介面的輸出。

按照tdd規範,首次執行測試,應該故意讓它失敗。點選執行->執行為->junit測試(記住應該被突出的顯示在包資源管理器中)。在左邊視窗,應該看見junit視窗而不是包資源管理器,它顯示乙個紅條,一次失敗的測試,具體的失敗原因參看圖2。

如果沒有自動顯示這些內容,點選junit標籤(在底部的左邊)。

圖2. junit中失敗的測試

很好!但卻失敗了。現在我們來建立被測試**:

在包資源管理器視窗的projectwithjunit標題上右擊,選擇新建->類。選擇類名,我們已經假設了它叫helloworld,然後直接點選完成。為填入下列**:

public class helloworld

}  這段**很簡單,甚至不需要註解,我們再來看看結果。按照上面描述過的方式,在junit的視窗中顯示了乙個綠條,參看圖3。綠條證明測試成功。

圖3. junit中成功的測試

現在,我們想再讓測試失敗一次,但原因不同。這有助於展示junit測試中不同的報錯資訊。修改assertequals()**,把「hello world!

」變成「hello me!」。當再次執行junit時,結果變成了紅條,在junit視窗的底部輸出了失敗原因,參看圖4。

圖4. junit中的comparisonerror

最後,我想說一下關於測試是開發過程中的必要部分的話題。測試**一直是開發中的重要部分。經過近幾年的發展,已得到了很大的提高,這要歸功於強大的理論研究(比如「expectations-based development」等等),和快速發展的測試工具包,還有測試過程的改進。

如果你對這篇文章感興趣,那請你花一些時間來正式的學習一下測試理論吧,這對你的工作很有用。

Eclipse中建立自己的JUnit測試

cnjsp 2005 3 27 20 33 00 文 rosen 這篇文章將向你介紹junit,乙個用來在專案中進行測試和除錯的工具。在介紹完tdd 以測試驅動開發 理論後,將進一步講解怎樣在流行的eclipse中建立你自己的junit測試。向你展示如何測試hello world這樣簡單的程式。許多...

如何建立自己的威信

第三 善結緣 左右逢源方能事事順達 朋友多可以互相幫忙,共同發展 朋友越多可供選擇的路就越多,辦事就會愈發通暢 快捷,成功機率就會大大增加,而少樹敵會使自己少受一些惡意攻擊和損傷,會減少許多不必要的麻煩。善於結緣,多交朋友,編織一張結實的 關係網 就能聚集自己的人脈,使自己做人如魚得水,做事左右逢源...

如何建立自己的思維方式

比方說你學到乙個分析問題的方法,比如麥肯錫的 現象 問題 原因 對策 反饋 迴圈,看起來容易,但真成為你的思維 庫中的一種,你至少得找不同場合不同的事情用同樣的方法反覆練習。記住是不同的場合不同的事情用同樣的方法反覆練習,把一件事情反覆做一百遍和用乙個方法反覆做一百件事情是完全不同的概念。所以我常常...