1、什么是Junit
Junit即單元測試,是JAVA語言的單元測試框架,是對程序的一個方法所進行的測試
一般都是由程序員自己通過Junit來進行測試,因此單元測試也叫程序員測試;
如果測試人員熟悉程序員的代碼邏輯也可以進行接口測試,可用於進行接口測試,即白盒測試。
2、如何使用Junit
要使用Junit測試框架,必須要在maven項目的基礎上才能使用,因此這里先對maven進行介紹。
★maven介紹
1)是一種特殊的JAVA project,通過maven創建后的項目上面會有一個M字樣的標志,如下圖所示。

2)在maven中集成了junit測試包,應該說maven可以集成任何你想的到或者想不到工具插件。
3)優勢:如果不是maven項目,如果使用到某個JAR包,就需要手動就添加,但通過maven創建的項目就不需要。
4)作用:可進行編譯,打包,也可以進行模塊管理
★如何創建maven項目
第一步:
在eclipse中點擊new->other來創建一個maven項目

第二步:
在打開的的對話框中選擇Maven Project,然后點擊下一步

第三步:
勾選create a simple project,然后再點擊next
注意:
第一次使用maven時需要下載,如果速度慢需要等待很長一段時間

第四步:
在new maven project中填寫group id ,artifact id(文件夾名字),其它默認或者不填,然后finish
group id與artifact id解釋如下:
groupid和artifactId被統稱為“坐標”是為了保證項目唯一性而提出的,如果你要把你項目弄到maven本地倉庫去,你想要找到你的項目就必須根據這兩個id去查找。
groupId一般分為多個段,這里我只說兩段,第一段為域,第二段為公司名稱。域又分為org、com、cn等等許多,其中org為非營利組織,com為商業組織。舉個apache公司的tomcat項目例子:這個項目的groupId是org.apache,它的域是org(因為tomcat是非營利項目),公司名稱是apache,artigactId是項目名稱即tomcat。

第 五步:
按以上步驟即可完成maven項目的創建了。
以下為所創建的maven項目即test_junit各個文件夾的解釋:
1)src/main/java:存放JAVA代碼
2)src/main/resources:存放JAVA的資源文件
3)src/test/java:存放測試的JAVA代碼
4)src/test/resources:存放測試JAVA代碼需要用到的一些資源文件
5)pox.xml:用於描述maven項目的一些相關信息,比如:創建的test_junit的版本信息,Group Id,包的結構等等,都可以在pox.xml中查看到。

第六步:
如何通過maven引入需要用到的junit的jar包。
1)打開pox.xml文件,選擇pox.xml標簽

2)然后在pox.xml中輸入以下代碼,來引入相關的junit的JAR包,代碼如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>

注意:
這段代碼的意思是從中央倉庫拿到代碼后放到本地倉庫中。
中央倉庫的地址為:
mvnrepository.com/artifact/org.hamcrest/hamcrest-core/1.3
本地倉庫查看方法:
windows->preferuserences->maven->user settings

然后保存后,重新打開test_junit項目,就可以看到maven dependeccies,即所引入的jar包。

3、如何進行單元測試
一共有二種方法,分別如下:
方法一:
通過繼承類TestCase,測試方法必須以test開頭來命名
例如:
public class Demo1 extends TestCase{
public void test1(){
...
}
}

注意:這種方法中寫的所有的方法都必須是以test開頭,例如:testXXXX
執行上面的代碼后會在左邊顯示出這兩個測試方法是否執行成功。綠色代表執行成功,紅色代表執行失敗,且test1跟test2方法上面的會顯示X。

方法二:
需要在測試方法前面加入注解,而注解的類型分別如下:
@Test:表明這是一個測試方法
@Before:每執行一個測試方法前都會先執行被標注了此注解的方法
@After:每執行一個測試方法后都會先執行被標注了此注解的方法
@BeforeClass:測試用例初始化時執行被@BeforeClass標注的方法,只會執行一次
@AfterClass:當所有測試執行完畢之后,執行進行收尾工作,也就是執行被@AfterClass標注的方法,只會執行一次
格式:
@Test
public void method1(){
...
}
注意:
此時方法名可以隨便寫,不用一定要寫成testXXX了。
例如:
public class Demo2 { @BeforeClass public static void method5(){ System.out.println("Demo2.method5()"); } @Before public void method3(){ System.out.println("Demo2.method3()"); } @Test public void method1(){ System.out.println("Demo2.method1()"); } @Test public void method2(){ System.out.println("Demo2.method2()"); } @After public void method4(){ System.out.println("Demo2.method4()"); } @AfterClass public static void method6(){ System.out.println("Demo2.method6()"); } }
執行后的結果如下:

注意:
@BeforeClass與@AfterClass所標注的測試方法要定義成static類型才能被執行
4、斷言(Assert)
單元測試必須要用到斷言,被用來檢查非法情況而不是錯誤情況,即在該程序正常工作時絕不應該發生的非法情況,用來幫助開發人員對問題的快速定位。
常用的API如下:
assertEquals(a,b):判斷兩個數據是否一致
assertNotEquals(a,b):判斷兩個數據是否不一致;
assertNull(object):查看對象是否為空
assertNotNull(object):查看對象是否不為空;
assertTrue(...):判斷當前運行結果是否為真;
assertFalse(...):判斷當前運行結果是否為假;
例如:
assertEquals(3, caculator.getResult());
用於判斷通過計算器計算的是否正確

5、打包類測試
介紹:
打包類測試,是把所有的測試類打包在一起測試,即在測試方法前引入所有的測試類即可。
優點:
可以一次性的測試所有的方法,而不用一個一個的去跑了。
代碼格式如下:
@RunWith(Suite.class)
@Suite.SutieClasses({類1,類2,類3,...})
public class JunitTestAll {
}
例如:

6、斷言與異常的區別
斷言用在那些你知道絕對不會發生的事情上,但是因為人總是會犯錯誤,保不准你寫出來的東西跟你想的不一樣。所以assert用來捕捉的是程序員自己的錯誤。
但異常(exception)主要用於捕捉的是用戶或者環境的錯誤。