1. 程式人生 > >Java單元測試和JUnit

Java單元測試和JUnit

**********************單元測試和JUnit********************************


為什麼要使用單元測試


1.底層程式碼沒問題,上一層才不會出現問題.. 就像蓋樓一樣

2.提高士氣,明確知道我的東西是沒問題的, 保證你不被開


3.加大測試的力度可以降低後期維護的成本


一.什麼是JUnit


JUnit是一個單元測試框架,另一個叫做TestNG


框架: 一組類(普通類、抽象類、介面)的集合,別人幫你寫好了,你直接拿來用就可以了,
提供一系列功能... 提供了測試相關的功能

半成品: 一半已經完成了、一半沒有完成

類似於填空題、選擇題


使用框架的好處: 限制了程式設計師的隨意發揮,提高了程式的可讀性和可維護性,便於團隊的開發


JUnit已經逐漸成為xUnit家族中最為成功的一個.

xUnit中還有: cppUnit、pythonUnit、xUnit.net

 

二.why 為什麼用JUnit


使用main方法測試好不好??

不好.缺點如下

1.多個測試用例類無法同時測,每測一個業務邏輯類 都用單獨去執行它的測試用例,比較麻煩


2.使用main方法測試需要人為的觀察 測試結果 比如看到30 就是正確 比較麻煩

使用了jUnit以後 只需要看bar就可以了 綠條 表示測試通過 紅條 表示測試失敗

 

三.how 如何使用jUnit


去官網下載 http://junit.org/


最新版本jUnit5 ,我們使用的是穩定版本 jUnit-4.10


下載下來以後是一個zip包,解壓縮 使用裡面的 junit-4.10.jar 檔案即可

 

1. 導jar包

把junit-4.10.jar 導到 myeclipse中的 build-path中


工程右鍵-build path -configure build path--libraies--add external jar

選中d:\ jUnit-4.10.jar 即可


jar包; 實質就是壓縮包, zip、rar、jar


什麼是build-path?build-path的作用?

build- path 構建路徑

build-path相當於以前所學的class-path的概念,build-path是myeclipse自己

的一套classpath.

 

程式設計師知道jar包在d:\盤 ,但是myeclipse不知道,如何讓myeclipse找到jar包


把jar新增到build-path中就可以了,myeclipse就能找到jar包了

 

如果程式設計師沒有使用任何IDE程式設計, 例如使用editplus 這樣想使用jar包需要把

jar包的路徑新增到classpath中即可

 


Classpath: 執行的類去哪找 是去Classpath找,編譯的時候 當前類 依賴的類(TestCase) 去哪找 也是去Classpath下找


如果沒有把 jUnit-4.10.jar加到 classpath是找不到這個類的...

 

 


2. 進行測試


(1) 業務邏輯類 Calculator


(2) 編寫測試用例類

TestXXX


TestCalculator

 

*************************************使用jUnit如何編寫測試用例類*******************************


1. jUnit3


演示程式碼:

package com.chapter17;

import junit.framework.TestCase;

//測試用例類
//jUnit3的測試用例類
public class TestCalculator extends TestCase {

// 測試方法的命名規範
// public void textXXX 沒有任何的引數
public void testAdd() {
Calculator cal = new Calculator();

int sum = cal.add(10, 20);

//使用斷言來代替 System.out.println
//斷言: 就是判斷的意思
assertEquals("親,失敗了",30,sum);
}
}


如何執行:

展開Outline概要檢視 在你想要執行的測試方法上面 右鍵 run as -junit test


2. jUnit4


測試用例類不需要繼承任何類,直接在測試方法上面加一個@Test註解就可以了

 


演示程式碼:


import org.junit.Test;
import static org.junit.Assert.*;

//jUnit4的測試用例類
public class TestCalculator4 {

@Test
public void testAdd(){
Calculator cal = new Calculator();

int sum = cal.add(10, 20);

assertEquals("親,失敗了",30,sum);
}

}

**********************************測試結果分析****************************************


1. 測試通過 Pass


期望值和實際值相等,表示測試通過...綠條


一組測試用例


輸入引數1 輸入引數2 期望值 實際值


10 20 30 30


2. 測試失敗 Failure


期望值和實際值不等,紅條


3. 測試錯誤 Error

 

測試程式碼本身出現問題... 需要先把測試程式碼的錯誤修正以後 再從新進行測試

 

*************************************測試常用的方法*******************************


jUnit3

 

setUp(): 在每個測試方法執行前執行,一般用來放建立資源的程式碼(例如連線資料庫、建立socket連線等)


tearDown(): 在每個測試方法執行後執行,一般用來放釋放資源的程式碼(例如關閉資料庫、關閉socket連線等)

 


jUnit4


Unit4支援多種註解來簡化測試類的編寫
–@Before 註解:與junit3.x中的setUp()方法功能一樣,在每個測試方法之前執行。
–@After 註解:與junit3.x中的tearDown()方法功能一樣,在每個測試方法之後執行。
–@BeforeClass 註解:在所有方法執行之前執行。
–@AfterClass 註解:在所有方法執行之後執行。
–@Test註解:表示當前方法為需要測試的方法。
–@Ignore:臨時禁止一個測試的方法是通過註釋掉它或者改變命名約定,這樣測試執行機就無法找到它。

 

**測試期望出現一個異常


@Test(expected=ArithmeticException.class)
public void testDivide(){
Calculator cal = new Calculator();

int result = cal.divide(10, 2);

}


**測試效率


新建一個業務邏輯類

public class FileCopy {
public void copy(){
for(int i=1;i<=1000;i++){
System.out.println(i);
}
}
}


測試用例類
public class TestFileCopy {

@Test(timeout=50)
public void testCopy(){
FileCopy fc = new FileCopy();

fc.copy();
}
}

 

 


*************************************測試套件*******************************


如果想執行多個測試用類,之前需要在每個測試用例類 上面 單擊右鍵 一個一個執行,比較麻煩.
有沒有一種方式可以讓多個測試用例類 同時執行?

有的.可以把多個測試用例類加入到測試套件中,只需要執行該測試套件即可..執行了這個測試套件,相當於

把該測試套件中所有的測試用例類都挨個執行了

 


*************************************引數化測試*******************************


讓多組測試用例的資料同時執行


演示程式碼參見教案