您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關測試工具 JUnit 4怎么用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
JUnit 4.x 是利用了 Java 5 的特性(Annotation)的優勢,使得測試比起 3.x 版本更加的方便簡單,JUnit 4.x 不是舊版本的簡單升級,它是一個全新的框架,整個框架的包結構已經徹底改變,但 4.x 版本仍然能夠很好的兼容舊版本的測試用例。
先來點實在的,看看代碼中是怎么使用的。其余的待會再說。
下載 JUnit4.8.1.jar 包(這里提供了下載地址)
把 junit4.8.1.jar 文件,加入到項目的 classpath 中。
在代碼之前,先讓我們看一下 JUnit 4 和 JUnit 3 的區別,看看 JUnit 4 到底簡化了哪些東西。
[java] view plain copy
<span style="font-family:Microsoft YaHei;">package com.tgb;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;
public class TestWordDealUtil {
// 測試 wordFormat4DB 正常運行的情況
@Test
public void testWordFarmat4DBNormal() {
String target = "employeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info", result);
}
// 測試 null 時的處理情況
@Test(expected=NullPointerException.class)
public void testWordFormat4DBNull() {
String target = null;
String result = WordDealUtil.wordFormat4DB(target);
assertNull(result);
}
// 測試空字符串的處理情況
@Test
public void testWordFormat4DBEmpty() {
String target = "";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("", result);
}
// 測試當首字母大寫時的情況
//@Ignore
@Test
public void testWordFormat4DBBegin() {
String target = "EmployeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("_employee_info", result);
}
// 測試當尾字母大寫時的情況
@Test
public void testWordFormat4DBEnd() {
String target = "employeeInfoA";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info_a", result);
}
// 測試多個相連字母字母大寫時的情況
@Test
public void testWordFormat4DBTogether() {
String target = "employeeAInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_a_info", result);
}
}
從圖中可以看出,TestWordDealUtil 測試類中,有6個測試方法,其中有5個測試方法都已經通過,另外一個拋出了 NullPointerException (空指針)異常,需要注意的是,這里并不是單元測試的失敗(Failure),而是測試出現了錯誤(Error)。那么,這兩種有什么區別呢?下面就討論一下這兩者的區別。
JUnit 將測試失敗的情況分為兩種:Failure 和 Error 。 Failure 一般是由單元測試使用的斷言方法判斷失敗引起的,它表示在測試點發現了問題(程序中的 bug);而 Error 則是有代碼異常引起的,這是測試目的之外的發現,它可能產生于測試代碼本身的錯誤(也就是說,編寫的測試代碼有問題),也可能是被測試代碼中的一個隱藏 bug 。不過,一般情況下是第一種情況。
@Before
初始化方法,在任何一個測試方法執行之前,必須執行的代碼。對比 JUnit 3 ,和 setUp()方法具有相同的功能。在該注解的方法中,可以進行一些準備工作,比如初始化對象,打開網絡連接等。
@After
釋放資源,在任何一個測試方法執行之后,需要進行的收尾工作。對比 JUnit 3 ,和 tearDown()方法具有相同的功能。
@Test
測試方法,表明這是一個測試方法。在 JUnit 中將會自動被執行。對與方法的聲明也有如下要求:名字可以隨便取,沒有任何限制,但是返回值必須為 void ,而且不能有任何參數。如果違反這些規定,會在運行時拋出一個異常。不過,為了培養一個好的編程習慣,我們一般在測試的方法名上加 test ,比如:testAdd()。
同時,該 Annotation(@Test) 還可以測試期望異常和超時時間,如 @Test(timeout=100),我們給測試函數設定一個執行時間,超過這個時間(100毫秒),他們就會被系統強行終止,并且系統還會向你匯報該函數結束的原因是因為超時,這樣你就可以發現這些 bug 了。而且,它還可以測試期望的異常,例如,我們剛剛的那個空指針異常就可以這樣:@Test(expected=NullPointerException.class)。再來看一下測試結果。
@Ignore
忽略的測試方法,標注的含義就是“某些方法尚未完成,咱不參與此次測試”;這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。一旦你完成了相應的函數,只需要把 @Ignore 注解刪除即可,就可以進行正常測試了。當然,這個 @Ignore 注解對于像我這樣有“強迫癥”的人還是大有意義的。每當看到紅色條(測試失敗)的時候就會全身不舒服,感覺無法忍受(除非要測試的目的就是讓它失敗)。當然,對代碼也是一樣,無法忍受那些雜亂不堪的代碼。所以,建議大家都寫漂亮的代碼。這樣人人都喜歡看你的代碼。哎,有強迫癥的人傷不起啊!
@BeforeClass
針對所有測試,也就是整個測試類中,在所有測試方法執行前,都會先執行由它注解的方法,而且只執行一次。當然,需要注意的是,修飾符必須是 public static void xxxx ;此 Annotation 是 JUnit 4 新增的功能。
@AfterClass
針對所有測試,也就是整個測試類中,在所有測試方法都執行完之后,才會執行由它注解的方法,而且只執行一次。當然,需要注意的是,修飾符也必須是 public static void xxxx ;此 Annotation 也是 JUnit 4 新增的功能,與 @BeforeClass 是一對。
所以,在 JUnit 4 中,單元測試用例的執行順序為:
每一個測試方法的調用順序為:
最后,在來說說關于測試的規范,這些規范是從編程規則,以及日常的實踐中,由那些大牛們總結出來的。作為后人的我們,在大樹下乘涼的同時,更要遵守這些規則,使得大樹更加茁壯成長。
單元測試代碼應位于單獨的 Source Folder 下
此 Source Folder 通常為 test ,這樣可以方便的管理業務代碼與測試代碼。其實,在項目管理工具 Maven 上已經做了這種規范了。在我們自己寫代碼時,注意一下即可。
測試類應該與被測試類位于同一 package 下
便于進行管理,同時減少引入帶測試類的麻煩。
選擇有意義的測試方法名
無論是 JUnit 4 ,還是 JUnit 3 ,單元測試方法名均需使用 test<待測試方法名稱>[概要描述] ,如 public void testDivideDivisorIsZero() ,很容易知道測試方法的含義。
保存測試的獨立性
每項單元測試都必須獨立于其他所有單元測試而運行,因為單元測試需能以任何順序運行。
為暫時未實現的測試代碼忽略(@Ignore)或拋出失敗(fail)
在 JUnit 4 中,可以在測試方法上使用注解 @Ignore 。在 JUnit 3 中,可以在未實現的測試方法中使用 fail("測試方法未實現"); 以告知失敗是因為測試方法未實現。
在調用斷言(assert)方法時給出失敗的原因
在使用斷言方法時,請使用帶有 message 參數的 API ,并在調用時給出失敗時的原因描述,如 assertNotNull("對象為空", new Object())。
上述就是小編為大家分享的測試工具 JUnit 4怎么用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。