全面認識JUnit 4的新特征
發表于:2007-06-22來源:作者:點擊數:
標簽:
下一頁 1 2 3 4 提要 本文將向你介紹如何實現從JUnit 3.8向JUnit 4的遷移。同時,還討論JUnit 4中的一些新特征,特別包括對注解的使用;最后,簡要介紹這個新版本的IDE集成現狀。 一、 引言 在本文開始,我將假定,你已經了解由Kent Beck和Erich Gamma發明的
下一頁 1 2 3 4
提要 本文將向你介紹如何實現從JUnit 3.8向JUnit 4的遷移。同時,還討論JUnit 4中的一些新特征,特別包括對注解的使用;最后,簡要介紹這個新版本的IDE集成現狀。
一、 引言
在本文開始,我將假定,你已經了解由Kent Beck和Erich Gamma發明的這個Java單元測試框架并因此而略過必要的簡介。所以,我將集中分析從JUnit 3.8到最新版本-JUnit 4的遷移過程以及其在IDE和Ant中的集成。
JUnit 4是一種與其之前的版本完全不同的API,它根據Java 5.0中的新特征(注解,靜態導入等)構建而成。如你所見,JUnit 4更簡單、更豐富和更易于使用,而且它引入了更為靈活的初始化和清理工作,還有限時的和參數化測試用例。
代碼實例最能說明問題。因此,在本文中,我將使用一個例子來展示不同的測試用例:一個計算器。該示例計算器很簡單,效率并不高,甚至還有一些錯誤;它僅僅操作整數,并且把結果存儲在一個靜態變量中。Substract方法并不返回一個有效的結果,而且也沒有實現乘法運算,而且看上去在squareRoot方法中還存在一個錯誤:無限循環。這些錯誤將幫助說明使用JUnit 4進行測試的有效性。你可以打開和關閉這個計算器,而且你可以清除這些結果。下面是其實現代碼:
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e7e9e9 border=1>
package calc; public class Calculator { private static int result; //存儲結果的靜態變量 public void add(int n) { result = result + n; } public void substract(int n) { result = result - 1; //錯誤:應該是"result = result - n" } public void multiply(int n) {} //還沒實現 public void divide(int n) { result = result / n; } public void square(int n) { result = n * n; } public void squareRoot(int n) { for (; ;) ; //錯誤:無限循環 } public void clear() { //清除結果 result = 0; } public void switchOn() { //打開屏幕,顯示"hello",并報警 result = 0; //實現其它的計算器功能 } public void switchOff() { } //顯示"bye bye",報警,并關閉屏幕 public int getResult() { return result; } } | 二、 遷移一個測試類
現在,我將把一個已經使用JUnit 3.8編寫成的簡單的測試類遷移到JUnit 4。這個類有一些缺陷:它沒有測試所有的業務方法,而且看上去在testDivide方法中還存在一個錯誤(8/2不等于5)。因為還沒有實現乘法運算功能,所以對其測試將被忽略。
下面,我們把兩個版本的框架之間的差別以粗體顯示出現于表格1中。
表格1.分別以JUnit 3.8和JUnit 4實現的CaculatorTest。
JUnit 3.8
package junit3; import calc.Calculator; import junit.framework.TestCase; public class CalculatorTest extends TestCase { private static Calculator calculator = new Calculator(); @Override protected void setUp() { calculator.clear(); } public void testAdd() { calculator.add(1); calculator.add(1); assertEquals(calculator.getResult(), 2); } public void testSubtract() { calculator.add(10); calculator.subtract(2); assertEquals(calculator.getResult(), 8); } public void testDivide() { calculator.add(8); calculator.divide(2); assert calculator.getResult() == 5; } public void testDivideByZero() { try { calculator.divide(0); fail(); } catch (ArithmeticException e) { } } public void notReadyYetTestMultiply() { calculator.add(10); calculator.multiply(10); assertEquals(calculator.getResult(), 100); } } | JUnit 4
package JUnit 4; import calc.Calculator; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.*; public class CalculatorTest { private static Calculator calculator = new Calculator(); @Before public void clearCalculator() { calculator.clear(); } @Test public void add() { calculator.add(1); calculator.add(1); assertEquals(calculator.getResult(), 2); } @Test public void subtract() { calculator.add(10); calculator.subtract(2); assertEquals(calculator.getResult(), 8); } @Test public void divide() { calculator.add(8); calculator.divide(2); assert calculator.getResult() == 5; } @Test(expected = ArithmeticException.class) public void divideByZero() { calculator.divide(0); } @Ignore("not ready yet") @Test public void multiply() { calculator.add(10); calculator.multiply(10); assertEquals(calculator.getResult(), 100); } } |
|
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月