您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUnit單元測試框架的使用
作者:java_阿杰 發(fā)布時間:[ 2016/10/9 14:04:50 ] 推薦標簽:單元測試 Junit

  我們寫單元測試,一般都會用到一個或多個單元測試框架,在這里,我們介紹一下JUnit4這個測試框架。這是Java界用的廣泛,也是基礎的一個框架,其他的很多框架,包括我們后面會看到的Robolectric,都是基于或兼容JUnit4的。然而首先要解決的問題是。。。
  為什么要使用單元測試框架呢
  或者換句話說,單元測試框架能夠為我們做什么呢?從基本的開始說起,假如我們有這樣一個類:
public class Calculator {
public int add(int one, int another) {
// 為了簡單起見,暫不考慮溢出等情況。
return one + another;
}
public int multiply(int one, int another) {
// 為了簡單起見,暫不考慮溢出等情況。
return one * another;
}
}
  如果不用單元測試框架的話,我們要怎么寫測試代碼呢?我們恐怕得寫出下面這樣的代碼:
public class CalculatorTest {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int sum = calculator.add(1, 2);
if(sum == 3) {
System.out.println("add() works!")
} else {
System.out.println("add() does not works!")
}
int product = calculator.multiply(2, 4);
if (product == 8) {
System.out.println("multiply() works!")
} else {
System.out.println("multiply() does not works!")
}
}
}
  然后我們再通過某種方式,比如命令行或IDE,運行這個 CalculatorTest 的 main 方法,在看著terminal的輸出,才知道測試是通過還是失敗。想想一下,如果我們有很多的類,每個類都有很多方法,那么要寫一堆這樣的代碼,每個類對于一個含有 main 方法的test類,同時 main 方法里面會有一堆代碼。這樣既寫起來痛苦,跑起來更痛苦,比如說,你怎么樣一次性跑所有的測試類呢?所以,一個測試框架為我們做的基本的事情,是允許我們按照某種更簡單的方式寫測試代碼,把每一個測試單元寫在一個測試方法里面,然后它會自動找出所有的測試方法,并且根據(jù)你的需要,運行所有的測試方法,或者是運行單個測試方法,或者是運行部分測試方法等等。
  對于上面的 Calculator 例子,如果使用Junit的話,我們可以按照如下的方式寫測試代碼:
public class CalculatorTest {
@Test
public void testAdd() throws Exception {
Calculator calculator = new Calculator();
int sum = calculator.add(1, 2);
Assert.assertEquals(3, sum);
}
@Test
public void testMultiply() throws Exception {
Calculator calculator = new Calculator();
int product = calculator.multiply(2, 4);
Assert.assertEquals(8, product);
}
}
  每一個被測試的方法( add(), multiply() ),寫一個對應的測試方法( testAdd(), testMultiply() )。那JUnit怎么知道那些是測試方法,哪些不是呢?這個是通過前面的 @Test 注解來標志的,只要有這個注解,JUnit4會當做是一個測試方法,方法名其實是可以隨意起的。當然,名字還是應該起的更有可讀性一點,讓人一看知道,這個測試方法是測試了被測的類的那個方法,或者是測試了那個功能點等等。
  除了幫我們找出所有的測試方法,并且方便運行意外,單元測試框架還幫我們做了其他事情。在 這個系列的第一篇文章 中我們提到,一個測試方法主要包括三個部分:
  1、setup
  2、執(zhí)行操作
  3、驗證結果
  而一個單元測試框架,可以讓我們更方便的寫上面的每一步的代碼,尤其是第一步和第三部。比如說,在上面的 CalculatorTest 中, testAdd() 和 testMultiply() 都有相同的setup: Calculator calculator = new Calculator(); ,如果 Calculator 還有其他的方法的話,這行代碼得重復更多次,這種duplication是沒必要的。絕大多數(shù)單元測試框架考慮到了這一點,它們知道一個測試類的很多測試方法可能需要相同的setup,所以為我們提供了便捷方法。對于JUnit4,是通過 @Before 來實現(xiàn)的:
public class CalculatorTest {
Calculator mCalculator;
@Before
public void setup() {
mCalculator = new Calculator();
}
@Test
public void testAdd() throws Exception {
int sum = mCalculator.add(1, 2);
assertEquals(3, sum);  //為了簡潔,往往會static import Assert里面的所有方法。
}
@Test
public void testMultiply() throws Exception {
int product = mCalculator.multiply(2, 4);
assertEquals(8, product);
}
}

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd