近期寫單元測試計劃,公司準備把junit3.8升級到junit4以上的版本,因此研究了一下,寫下學習過程和心得體會,爲了鞏固學習成果,因此把學習心得寫下來加深印象,也供須要的朋友查閱,少走彎路。數據庫
假設咱們要寫一個整數除法和乘法的類,而且給他寫測試用例:eclipse
一、創建Math類ide
工具是eclipse3.3工具
Java代碼單元測試
/**學習
* @author bulargy.j.bai測試
* @建立時間:Mar 10, 2008spa
* @描述:一個整數除法和乘法的工具類ip
*/it
public class Math {
public static int divide(int x,int y) {
return x/y;
}
public static int multiple(int x,int y) {
return x*y;
}
}
/**
* @author bulargy.j.bai
* @建立時間:Mar 10, 2008
* @描述:一個整數除法和乘法的工具類
*/
public class Math {
public static int divide(int x,int y) {
return x/y;
}
public static int multiple(int x,int y) {
return x*y;
}
}
二、創建測試用例
選中須要創建測試用例的包,選擇new->other->JUnit Test Case.
有5個方法能夠選擇:
setUp()方法在測試方法前調用,通常用來作測試準備工做。
tearDown()方法在測試方法後調用,通常做測試的清理工做。
setUpBeforeClass()方法在整個類初始化以後調用,通常用來作測試準備工做。
tearDownAfterClass()方法在整個類結束以前調用,通常做測試的清理工做。
constructor()爲是否包含構造方法。
自動生成的代碼以下:
Java代碼
/**
* @author bulargy.j.bai
* @建立時間:Mar 11, 2008
* @描述:
*/
public class MathTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test
public void testDivide() {
fail("Not yet implemented");
}
@Test
public void testMultiple() {
fail("Not yet implemented");
}
}
/**
* @author bulargy.j.bai
* @建立時間:Mar 11, 2008
* @描述:
*/
public class MathTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test
public void testDivide() {
fail("Not yet implemented");
}
@Test
public void testMultiple() {
fail("Not yet implemented");
}
}
說明:
@BeforeClass標籤註釋的方法用於在整個類測試過程的初始化後調用一次,@AfterClass標籤註釋的方法則是整個測試類結束以前調用一次。這2個標籤的搭配能夠避免使用@Before、@After標籤組合在每一個測試方法先後都調用的弊端,減小系統開銷,提升系統測試速度。(不過對環境獨立性要求較高的測試仍是應當使用@Before、@After來完成)
@Test標籤用來標註待測試的方法,按照類中聲明的順序執行。
咱們在testDivide方法加入測試代碼,分別測試三種狀況:
a. 徹底正確也沒有可能出錯的數據,如:9除3 結果必須等於3
b. 可能有問題的邊緣數據,如:10除3 結果也必須等於3
c. 錯誤的數據,如:10除0 必須拋出異常
忽略testMultiple方法
代碼以下:
Java代碼
@Test(expected=ArithmeticException.class)
public void testDivide() {
assertEquals(3,Math.divide(9,3));
assertEquals(3,Math.divide(10,3));
Math.divide(10,0); //除數不能爲0,會拋出異常
}
@Ignore("忽略乘法測試")
@Test
public void testMultiple() {
}
@Test(expected=ArithmeticException.class)
public void testDivide() {
assertEquals(3,Math.divide(9,3));
assertEquals(3,Math.divide(10,3));
Math.divide(10,0); //除數不能爲0,會拋出異常
}
@Ignore("忽略乘法測試")
@Test
public void testMultiple() {
}
說明:
Junit4爲測試方法增長了判斷異常的方式,避免了之前還要經過try/catch塊捕捉異常再拋出的複雜方式,簡單的這樣聲明"@Test(expected=ArithmeticException.class)"Junit4就會檢查此方法是否拋出ArithmeticException異常,若是拋出則測試經過,沒拋出則測試不經過(@Test標籤還有一些其餘參數,例如超時測試@Test(timeout=1)這樣,可是因爲並不能準確反應實際時間,因此應用較少,通過我測試偏差太大絕對不適合拿來作超時測試的)
@Ignore標籤會告訴Junit4忽略它所標註的方法,例如數據庫不可用時能夠用此標註標註一些測試數據庫鏈接的方法來避免測試失敗。