一、什么是單元測試
在平時的開發(fā)當(dāng)中,一個項目往往包含了大量的方法,可能有成千上萬個。如何去保證這些方法產(chǎn)生的結(jié)果是我們想要的呢?當(dāng)然了,最容易想到的一個方式,就是我們通過System.out來輸出我們的結(jié)果,看看是不是滿足我們的需求,但是項目中這些成千上萬個方法,我們總不能在每一個方法中都去輸出一遍嘛。這也太枯燥了。這時候用我們的單元測試框架junit就可以很好地解決這個問題。Junit是一個單元測試框架。
二、使用
注意:用Junit進(jìn)行單元測試必須滿足以下條件:
1、每一個測試方法上使用@Test進(jìn)行修飾
2、每一個測試方法必須使用public void 進(jìn)行修飾
3、每一個測試方法不能攜帶參數(shù)
4、測試代碼和源代碼在兩個不同的項目路徑下
5、測試類的包應(yīng)該和被測試類保持一致
6、測試單元中的每個方法必須可以獨(dú)立測試
1.Junit的jar包導(dǎo)入
如果不是maven項目,直接網(wǎng)上下載junit的jar包,如果是maven項目,直接導(dǎo)入maven依賴,版本改成自己需要。但是要注意,4.10以上版本的junit要配合hamcrest-core的jar包使用。
2.Junit簡單使用
import org.junit.*;
public class Tests {
@Test
public void testAdd(){
System.out.println("test1");
}
}
左擊方法名,點(diǎn)擊運(yùn)行按鈕,選擇debug模式,運(yùn)行結(jié)果如圖
3.對方法進(jìn)行斷言測試
這里寫了三個方法,主要對以下方法用斷言進(jìn)行測試,代碼如下
public class Method {
public int add(int a,int b){
return a+b;
}
public int delete(int a,int b){
return a-b;
}
public boolean isTrue(){
return 2==1;
}
}
- 1、assertEquals
斷言判斷是否相等,這個方法里面可以又很多參數(shù),一般根據(jù)我們的需要輸入相應(yīng)的參數(shù)
?
在這里選擇assertEquals(Object expected,Object actual),expected指的是期望得到的值,actual指實際返回的結(jié)果,如果期望值和實際結(jié)果不相等,就會拋異常,即斷言失敗。我們對add方法進(jìn)行測試,代碼如下
public class Tests {
@Test
public void testAdd(){
Assert.assertEquals(3,new Method().add(3,1));
System.out.println("test1");
}
}
輸入值和期望值不一樣,這里拋出異常
- 2、assertTrue/assertFalse
該斷言用來驗證給定的布爾型值是否為真,假如結(jié)果為假,則驗證失敗。
方法: assertTrue ([String message],Boolean condition)
message是個可選的消息,假如提供,將會在發(fā)生錯誤時報告這個消息。
這里測試isTrue方法,測試代碼如下:
public class Tests {
@Test
public void testTrue(){
Assert.assertTrue("不相等",new Method().isTrue());
System.out.println("test1");
}
}
很明顯,測試代碼里面返回的是false,所以會拋出message消息
assertFalse方法同上,只是判斷的結(jié)果相反,如果boolean中返回為false則不拋異常,返回為true拋出message消息。
- 3、assertNull
這個方法很好理解,就不寫專用的方法來進(jìn)行演示。用于判斷函數(shù)返回是否為空
方法:assertNotNull([String message],Object object)
message即返回為空之后的打印的消息,object是判斷的方法
測試代碼如下:
public class Tests {
@Test
public void testTrue(){
Assert.assertNull("不為空","abcde");
System.out.println("test1");
}
}
測試結(jié)果:如果判斷的對象不為空,則會拋出message消息,為空則通過測試
- 4、assertSame
該斷言用來驗證expected參數(shù)和actual參數(shù)所引用的是否是同一個對象,假如不是,則驗證失敗。相應(yīng)地,也存在驗證不是同一個對象的斷言。(和assertEquals區(qū)別在于,這個用于判斷實際結(jié)果是否與期望結(jié)果的引用內(nèi)存地址相同,類似于==,而assertEquals類似于equals方法)
方法:assertNotSame ([String message], expected,actual)
message也是斷言失敗后打印的消息,expected是期望值,actual是實際值
測試代碼:
public class Tests {
@Test
public void testTrue(){
Assert.assertSame("不相等",2,4-3);
System.out.println("test1");
}
}
測試結(jié)果:2肯定是不等于1的,這個時候會打印錯誤信息。
4.運(yùn)行流程
如果我們要在每個測試之前打開數(shù)據(jù)庫,又關(guān)閉數(shù)據(jù)庫,這樣如果在每個方法里面寫流程會非常麻煩,這個時候就有專有的測試方法運(yùn)行前后進(jìn)行操作的方法。其中beforeClass和afterClass方法必須是靜態(tài)方法。
@BeforeClass (setUpBeforeClass方法):
注解靜態(tài)方法;在運(yùn)行測試類時最先運(yùn)行且只執(zhí)行一次。
@AfterClass (tearDownAfterClass方法):
注解靜態(tài)方法;在運(yùn)行測試類時最后個運(yùn)行且只執(zhí)行一次。
@Before(setUp方法)
在執(zhí)行每個@Test之前執(zhí)行,每個@Test執(zhí)行前都會執(zhí)行@Before。
@Test
要執(zhí)行的測試單元
@After(tearDown方法)
在執(zhí)行每個@Test之后執(zhí)行,每個@Test執(zhí)行結(jié)束后都會執(zhí)行@After
public class Tests {
@Test
public void testAdd(){
System.out.println("test1");
}
@Test
public void testDelete(){
System.out.println("test2");
}
@BeforeClass
public static void beforeClass(){
System.out.println("beforeClass.....");
}
@After
public void after(){
System.out.println("after......");
}
@AfterClass
public static void afterClass(){
System.out.println("afterClass....");
}
@Before
public void before(){
System.out.println("before.....");
}
}
打印結(jié)果:
這里我們可以看到它的運(yùn)行流程是這樣的:
5.junit測試套件(批量測試)
有的時候我們可能不止要對一個類進(jìn)行測試,這個時候就要用到測試套件,兩個測試類如下
Tests:
public class Tests {
@Test
public void testAdd(){
System.out.println("test1");
}
}
Tests1
import org.junit.Test;
public class Tests1 {
@Test
public void testDelete(){
System.out.println("test2");
}
}
套件類Combine:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)//用于更改測試運(yùn)行器
@Suite.SuiteClasses({Tests.class,Tests1.class})//將要測試的類作為數(shù)組傳入到@Suite.SuiteClasses({})中
public class Combine {
/**
注意,該類中不要寫任何代碼
**/
}
直接點(diǎn)擊類名進(jìn)行Debug
運(yùn)行結(jié)果如圖:
?文章來源:http://www.zghlxwxcb.cn/news/detail-433519.html
是不是特別方便呢,可以多個類一起進(jìn)行測試,學(xué)會以上這些可以使用junit對方法進(jìn)行測試,但是具體需要測試的業(yè)務(wù)和邏輯要根據(jù)實際情況來編寫。文章來源地址http://www.zghlxwxcb.cn/news/detail-433519.html
到了這里,關(guān)于單元測試Junit使用與詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!