您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUNIT單元測試
作者:梅花瘦 發(fā)布時間:[ 2017/6/29 9:38:39 ] 推薦標(biāo)簽:單元測試 Junit

  我們在大型程序開發(fā)工作的時候,需要寫成千上萬個方法,這些方法的功能可能很強(qiáng)大,但我們在程序中只用到該方法的一小部分功能,并且經(jīng)過調(diào)試可以確定,這一小部分功能是正確的。但是,我們同時應(yīng)該確保每一個方法都完全正確,因?yàn)槿绻覀兘窈笕绻麑Τ绦蜻M(jìn)行擴(kuò)展,用到了某個方法的其他功能,而這個功能有bug的話,那是一件非常郁悶的事情。所以說,每編寫完一個方法之后,都應(yīng)該對這個方法的方方面面進(jìn)行測試,這樣的測試我們稱之為單元測試。傳統(tǒng)的編程方式,進(jìn)行單元測試是一件很麻煩的事情,你要重新寫另外一個程序,在該程序中調(diào)用你需要測試的方法,并且仔細(xì)觀察運(yùn)行結(jié)果,看看是否有錯。正因?yàn)槿绱寺闊,所以程序員們編寫單元測試的熱情不是很高。于是有一個牛人推出了單元測試包,大大簡化了進(jìn)行單元測試所要做的工作,這是JUnit4。本文簡要介紹一下在Eclipse中使用JUnit4進(jìn)行單元測試的方法。
  一.測試環(huán)境的搭建:
  1. 被測試類的創(chuàng)建:

  首先新建一個項(xiàng)目叫JUnit_Test,我們編寫一個Calculator類,這是一個能夠簡單實(shí)現(xiàn)加減乘除、平方、開方的計(jì)算器類,然后對這些功能進(jìn)行單元測試。這個類并不是很完美,我們故意保留了一些Bug用于演示,這些Bug在注釋中都有說明。該類代碼如下:
  public class Calculator {
  // 靜態(tài)變量,用于存儲運(yùn)行結(jié)果
  private static double result;
  public void add(double n) {
  result = result + n;
  }
  //Bug: 正確的應(yīng)該是 result = result-n
  public void substract(double n) {
  result = result - 1; 
  }
  public void multiply(double n) {
  // 此方法尚未寫好
  }
  public void divide(double n) {
  result = result / n;
  }
  public void square(double n) {
  result = n * n;
  }
  //Bug : 死循環(huán)
  public void squareRoot(double n) {
  for (; ;) ;           
  }
  // 將結(jié)果清零
  public void clear() {
  result = 0;
  }
  public double getResult() {
  return result;
  }
  }
  2. 測試類的創(chuàng)建:
  在Eclipse中創(chuàng)建單元測試類:
  (1).New --> Junit Test Case

  (2).選擇要覆蓋的方法

  (3).生成模板:
  public class CalculatorTest {
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
  }
  @AfterClass
  public static void tearDownAfterClass() throws Exception {
  }
  @Before
  public void setUp() throws Exception {
  }
  @After
  public void tearDown() throws Exception {
  }
  @Test
  public void testAdd() {
  fail("Not yet implemented");
  }
  @Test
  public void testSubstract() {
  fail("Not yet implemented");
  }
  @Test
  public void testMultiply() {
  fail("Not yet implemented");
  }
  @Test
  public void testDivide() {
  fail("Not yet implemented");
  }
  @Test
  public void testSquare() {
  fail("Not yet implemented");
  }
  @Test
  public void testSquareRoot() {
  fail("Not yet implemented");
  }
  @Test
  public void testClear() {
  fail("Not yet implemented");
  }
  @Test
  public void testGetResult() {
  fail("Not yet implemented");
  }
  }
  二、單元測試類的編寫:
  1. 前置和后置方法設(shè)置:

  private static Calculator calculator;
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
  calculator = new Calculator();
  }
  @AfterClass
  public static void tearDownAfterClass() throws Exception {
  calculator = null;
  }
  @Before
  public void setUp() throws Exception {
  calculator.clear();
  }
  @After
  public void tearDown() throws Exception {
  calculator.clear();
  }
  (2). 測試類的設(shè)置:   
  @Test
  public void testAdd() {
  calculator.add(2);
  calculator.add(3);
  assertEquals(5, calculator.getResult());
  }
  (3). 忽略位完成的測試類:@Ignore
  @Test
  @Ignore
  public void testSubstract() {
  fail("Not yet implemented");
  }
  (4). 測試:
  @Test(timeout  =   1000 )
  public void testSquare() {
  calculator.squareRoot( 4 );
  assertEquals( 2 , calculator.getResult());
  }
  (5). 異常測試:
  @Test(expected  =  ArithmeticException. class )
  public void testDivide() {
  calculator.divide( 0 );
  }

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