junit學習之junit的基本介紹
測試一般分為:單元測試、整合測試(主要看一塊程式碼加進去後,系統會不會有問題)、驗收測試和壓力測試。
假如一個專案非常的大,測試的東西非常的多,如果不用Junit的話,那麼這個工作量是非常大的。單元測試的最基本的一個功能是能進行自動化測試。單元測試都是通過斷言的方式來確定結果是否正確,即使用Assert。
一、準備工作
2、在eclipse中新建一個java專案,名稱為JavaJunitTest(可隨意),並再新建一個資料夾jar,用於存放我們下載的junit.jar包,然後把junit-4.7複製到裡面jar裡面,並使用右鍵add build path,即新增到類路徑中,如下圖所示:
3、新建一個類JunitTest.java,如上圖圖所示結構,內容為:
package com.junit.test;
import org.junit.Assert;
import org.junit.Test;
public class JunitTest {
@Test
public void test2()
{
System.out.println("test2()");
int rel=12;
Assert.assertEquals("不符合結果",2, rel);
}
}
二、進行測試
1、在junit4中提供了一個Assert的類,這個類中有大量的靜態方法進行斷言的處理,在junit3中由於繼承了TestCase,這個TestCase就可以直接assert,而junit4中需要先引入Assert類。如下面程式碼的使用,其中Assert是斷言,在assertEquals方法中,第一個引數是錯誤時輸出結果,第二個引數是程式設計師預期的結果,而第三個引數是實際結果
package com.junit.test;
import org.junit.Assert;
import org.junit.Test;
public class JunitTest {
@Test
public void test2()
{
System.out.println("test2()");
int rel=23;
Assert.assertEquals("不符合結果",2, rel);
}
}
在使用了Assert類中的assertEquals方法,這方法的第一個引數意思是:如果rel的結果不為2,那麼就會打印出“加法有問題”的資訊。
如下圖所示結果:
使用junit測試比使用main方法測試有很大的不同的,每個標識為@Test的方法都是一個可執行的方法,並且他們之間互不影響,例如一個方法出現問題了,並不影響另外一個方法的執行。這就是單元測試的好處
2、在測試除法除數為0,這個方法應該會丟擲異常。如下圖現在的測試目標是,如果執行測試方法時,方法沒有處理異常,那麼這個測試方法就不能通過。那麼如何判斷不能通過呢,那就是沒有進行到Assert斷言處,這時就會報ArithmeticException。
如下圖所示,我們對異常進行處理,我們就能夠看到程式執行結束,在Assert處獲得rel的值仍為初始化時的值0 那麼我們都知道有異常發生,那麼我們就給這個方法直接給這個方法斷言有異常,使用程式碼:@Test(expected=ArithmeticException.class)實現
package com.junit.test;
import org.junit.Assert;
import org.junit.Test;
public class JunitTest {
@Test(expected=ArithmeticException.class)
public void test2()
{
System.out.println("test2()");
int rel=0;
try{
rel=2/0;
}catch(Exception e)
{e.printStackTrace();}
//System.out.println("end");
Assert.assertEquals("不符合結果",2, rel);
}
}
結果如下所示:
上圖中,我們斷言運算中會丟擲異常expected=ArithmeticException.class,結果也丟擲異常expected=ArithmeticException.class,所以junit測試是通過的。
下面我們再測一測如果我們斷言有異常,但是演算法中沒有異常,結果如下圖所示:顯示我們期望的異常而不能正常運算
2、有時在測試時需要有這樣的需求,就是對一個方法的時間進行測試,例如,要讓一個方法,200毫秒裡執行完,如果這個方法200毫秒不能執行完,那麼這個方法就應該丟擲異常,示例中將方法time中執行緒沉睡300毫秒,那麼這個方法就不可能在200毫秒內完成,所以這個方法就會丟擲異常。如下圖所示:
因為發生異常,程式都沒有執行結束,沒輸出結尾的end,這就可以做一些方法效能上的測試,把Thread去掉,那麼這個測試就可正常通過。