天天看點

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

本節書摘來異步社群《junit實戰(第2版)》一書中的第1章,第1.6節,作者:【美】petar tahchiev , felipe leme , vincent massol , gary gregory,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

junit實戰(第2版)

junit擁有許多功能,可以使編寫、運作測試更加容易。通過本書,你将可以了解到這些功能在實際中的各種運用。

針對每個單元測試,單獨測試類執行個體和類加載器,以避免副作用。

junit注釋提供了資源初始化和回收方法:@before、@beforeclass、@after和@afterclass。

各種不同的assert方法使得檢查測試結果更加簡單。

與各種流行工具(如ant和maven)的整合,以及與流行ide(如eclipse、netbeans、intellij和jbuilder)的整合。

事不宜遲,我們趕緊來看一下代碼1.4,看看使用junit編寫的簡單calculator測試會是什麼樣子。

代碼1.4 使用junit編寫的calculatortest程式

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

這是一個非常簡單的測試,讓我們來仔細分析這段代碼。在..lucene實戰1.tif部分,我們首先定義了一個測試類。唯一的限制是這個類必須是公有的,我們可以對它任意命名。但通常的做法是在類名稱的末尾添加“test”字樣。也要注意,雖然在junit 3中我們需要擴充testcase類,但是在junit 4中,我們已經不需要這樣做了。

在..lucene實戰2.tif部分,我們通過添加@test注釋1,把這個方法标記為一個單元測試方法。最好的做法是按照testxxx模式命名測試方法。因為junit沒有方法名稱的限制,是以你可以根據自己喜好命名你的方法;隻要它們擁有了@test注釋,junit就會執行它們。

在..lucene實戰3.tif部分,我們通過建立calculator類的一個執行個體(被測試的對象)開始進行測試,并且在..lucene實戰4.tif部分,就像前面的操作一樣,我們通過調用測試方法并傳遞兩個已知值來執行測試。

在..lucene實戰5.tif部分,junit架構開始顯現威力了!為了檢查測試結果,我們調用了assertequals方法,這個方法是我們使用這個類的第一行中的靜态導入來導入的。assertequals方法的javadoc如下所示:

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

在代碼1.4中,我們傳遞給assertequals以下參數:

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

因為傳遞給calculator的值分别是10和50,然後告訴assertequals預期的和為60(因為我們相加的是整數,是以delta為0)。當我們調用calculator對象時,我們把傳回值傳給了一個叫做result的局部變量。是以,我們将這個變量傳遞給assertequals,來與預期的值60做比較。

如果實際值不等于預期值,那麼junit就抛出一個未經檢查的異常,這将導緻測試失敗。

在多數情況下,delta參數可以是零,我們大可放心地忽略它。它總是伴随着非精确計算(其中包括許多浮點計算)而出現。delta提供了一個誤差範圍。如果實際值在expected - delta和expected + delta範圍之内,則測試算通過。當進行帶有舍入誤差或截斷誤差的數學運算時,或者當斷言一個關于檔案修改日期的條件時,你就會發現它非常有用,因為這些資料的精确度取決于作業系統。

假設我們已經把代碼1.1和代碼1.4中的代碼輸入到c:junitbookch01-jumpstart目錄下(如果是unix作業系統則是/opt/junitbook/ch01-jumpstart),那麼我們首先通過在那個目錄中打開指令行提示并輸入以下指令來編譯代碼(我們假定javac可執行檔案在作業系統的path中)。

如果是windows作業系統:

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

如果是unix作業系統:

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

我們現在通過輸入以下指令,準備啟動控制台測試運作器。

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試
《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

圖1.2顯示了運作結果。

在代碼1.4中,關于junit的calculatortest類,最值得一提的是,其代碼要比代碼1.2中的第一個calculatortest程式更易于編寫。此外,我們也可以通過junit架構自動運作測試。

當我們在指令行提示下運作測試時(如圖1.2所示),我們可以看到運作測試所花費的時間和已認證的測試數量。還有許多其他運作測試的方法,從ide(如eclipse)到建構工具(如ant)。這個簡單的例子隻是讓你初步領略了一下junit和單元測試的強大。

《JUnit實戰(第2版)》—— 1.6 使用JUnit測試

圖1.2 使用文本界面的測試運作器執行首個junit測試calculatortest

1注釋首次在jdk 1.5中引入,是以為了使用它們,你需要安裝jdk 1.5版本或者更高版本。