程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> junit學習筆記(一):JUnit的安裝和測試原則

junit學習筆記(一):JUnit的安裝和測試原則

編輯:C++入門知識

這裡以一個加減乘除的類為例子。


最終工程如下:

 

 \
 

 


1、導入junit的jar,不建議直接使用eclipse 中提供的包
      junit的jar包下載:點擊打開鏈接 最新版本的是4.11
      這裡注意一個問題:如果是用4.11版本的話,同時還要下載hamcrest 1.3,下載地址->點擊打開鏈接,使用時,要同時導入這兩個包才可以!!
      如果是之前版本的,只需要導入一個junit的jar包就可以了

 


2、在src目錄下編寫服務代碼,這裡是一個只有加減乘除功能的類
[cpp]  package com.fjnu.util; 
 
public class Calculate { 
    public int add(int a, int b){ 
        return a+b; 
    } 
    public int minus(int a, int b){ 
        return a-b; 
    } 
    public int divide(int a,int b){ 
        return a/b; 
    } 
    public int multi(int a, int b){ 
        return a*b; 
    } 

package com.fjnu.util;

public class Calculate {
 public int add(int a, int b){
  return a+b;
 }
 public int minus(int a, int b){
  return a-b;
 }
 public int divide(int a,int b){
  return a/b;
 }
 public int multi(int a, int b){
  return a*b;
 }
}

 


3、創建測試類
     基本原則:1、在eclipse中創建一個source folder命名為test
                     2、創建一個測試類所在的包,包的名稱和要測試的類一致

\

[cpp] package com.fjnu.util; 
 
import org.junit.Before; 
import org.junit.Test; 
// 靜態導入  
import static org.junit.Assert.*; 
 
public class TestCalculate { 
    private Calculate cal; 
     
    // 執行任意一個方法之前都會執行setUp方法  
    @Before 
    public void setUp(){ 
        cal = new Calculate(); 
    } 
     
    // 加了@Test表示該方法是一個單元測試  
    @Test 
    public void testAdd(){ 
        /*
         * 以下是一個簡單的斷言的編寫
         * 第一個參數是如果出錯給出的提示信息
         * 第二個表示期望值,通常是用戶指定的內容
         * 第三個表示代碼返回的實際值
         */ 
    //  Assert.assertEquals("加法有問題", 34, cal.add(12,22));  
        /*
         * 由於包進行了靜態導入之後
         * Assert中的所有靜態方法就不用再添加類名了
         * 這樣可以有效地兼容junit3
         */ 
        assertEquals("加法有問題", 34, cal.add(12,22)); 
    } 
    @Test 
    public void testMinus(){ 
        int res = cal.minus(12, 2); 
 //     Assert.assertEquals("減法有問題", 10, res);  
        assertEquals("減法有問題", 10, res); 
    } 
    // 表示這個測試類應該拋出ArithmeticException,如果不拋出就報錯  
    @Test(expected=ArithmeticException.class) 
    public void testDivide(){ 
        int res = cal.divide(12, 0); 
        assertEquals("除法有問題", 6, res); 
    } 
     
    // 時間單位為ms  
    @Test(timeout=190) 
    public void testTime() throws InterruptedException{ 
        Thread.sleep(209); 
        int rel = cal.divide(12, 2); 
    } 
     
    @Test 
    public void testMulti(){ 
        int res = cal.multi(12, 2); 
        assertEquals("乘法有問題",24,res); 
    } 
    //hamcrest 1.3  

package com.fjnu.util;

import org.junit.Before;
import org.junit.Test;
// 靜態導入
import static org.junit.Assert.*;

public class TestCalculate {
 private Calculate cal;
 
 // 執行任意一個方法之前都會執行setUp方法
 @Before
 public void setUp(){
  cal = new Calculate();
 }
 
 // 加了@Test表示該方法是一個單元測試
  @Test
 public void testAdd(){
  /*
   * 以下是一個簡單的斷言的編寫
   * 第一個參數是如果出錯給出的提示信息
   * 第二個表示期望值,通常是用戶指定的內容
   * 第三個表示代碼返回的實際值
   */
 // Assert.assertEquals("加法有問題", 34, cal.add(12,22));
   /*
    * 由於包進行了靜態導入之後
    * Assert中的所有靜態方法就不用再添加類名了
    * 這樣可以有效地兼容junit3
    */
   assertEquals("加法有問題", 34, cal.add(12,22));
 }
  @Test
  public void testMinus(){
   int res = cal.minus(12, 2);
 //  Assert.assertEquals("減法有問題", 10, res);
   assertEquals("減法有問題", 10, res);
  }
  // 表示這個測試類應該拋出ArithmeticException,如果不拋出就報錯
  @Test(expected=ArithmeticException.class)
  public void testDivide(){
   int res = cal.divide(12, 0);
   assertEquals("除法有問題", 6, res);
  }
  
  // 時間單位為ms
  @Test(timeout=190)
  public void testTime() throws InterruptedException{
    Thread.sleep(209);
   int rel = cal.divide(12, 2);
  }
  
  @Test
  public void testMulti(){
   int res = cal.multi(12, 2);
   assertEquals("乘法有問題",24,res);
  }
  //hamcrest 1.3
}

 

 

 

4、Junit3和Junit4兩者之間的區別是非常明顯的
     在Junit3,中如果某個類需要是測試類,必須將其繼承於TestCase,如果某個方法需要是測試方法,必須讓這個方法通過testXXX開頭,在Junit3中如果希望指定某個測試方法運行之前運行某個初始化方法,這個方法名稱必須是setUp,如果希望在某個測試方法運行之後運行某個釋放資源的方法,這個方法的名稱必須是tearDown
       在Junit4中,一個POJO類就是一個測試類,測試方法通過@Test來標識,初始化方法通過@Before,釋放資源的方法通過@After來標注。但是為了讓junit4中的測試類在junit3中也可以使用,習慣於把初始化方法命名為setUp,釋放資源的方法命名為tearDown,測試方法也同樣以test開頭


5、如何使用斷言
     在junit4中提供了一個Assert的類,這個類中有大量的方法進行斷言的處理,在junit3中由於繼承了TestCase,這個TestCase中提供了大量的Assert方法。 在junit4中,為了與junit3兼容,可以靜態導入包Assert,即import static org.junit.Assert.*;  這樣的話使用Assert中的所有靜態方法就不用再添加類名了,可以有效地兼容junit3

 


6、expected參數,測試異常對象:    @Test(expected=ArithmeticException.class),表示檢查是否拋出ArithmeticException
[java]  // 表示這個測試類應該拋出ArithmeticException,如果不拋出就報錯  
@Test(expected=ArithmeticException. class) 
public void testDivide(){ 
      int res = cal.divide(12, 2); 
      assertEquals( "除法有問題", 6, res); 

       // 表示這個測試類應該拋出ArithmeticException,如果不拋出就報錯
       @Test(expected=ArithmeticException. class)
       public void testDivide(){
             int res = cal.divide(12, 2);
             assertEquals( "除法有問題", 6, res);
      }

 


7、timeout參數,性能測試:@Test(timeout=190),表示要在190ms內完成
[java]  // 時間單位為ms  
@Test(timeout=190) 
public void testTime() throws InterruptedException{ 
     Thread. sleep(189); 
      int rel = cal.divide(12, 2); 

       // 時間單位為ms
       @Test(timeout=190)
       public void testTime() throws InterruptedException{
            Thread. sleep(189);
             int rel = cal.divide(12, 2);
      }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved