Junit 入门使用教程
1、Junit 是什么?
JUnit是一個(gè)Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個(gè)JUnit有它自己的JUnit擴(kuò)展生態(tài)圈。多數(shù)Java的開發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測試的工具。
注意:Junit 測試也是程序員測試,即所謂的白盒測試,它需要程序員知道被測試的代碼如何完成功能,以及完成什么樣的功能
?
2、Junit 能做什么?
我們知道 Junit 是一個(gè)單元測試框架,那么使用 Junit 能讓我們快速的完成單元測試。
通常我們寫完代碼想要測試這段代碼的正確性,那么必須新建一個(gè)類,然后創(chuàng)建一個(gè) main() 方法,然后編寫測試代碼。如果需要測試的代碼很多呢?那么要么就會建很多main() 方法來測試,要么將其全部寫在一個(gè) main() 方法里面。這也會大大的增加測試的復(fù)雜度,降低程序員的測試積極性。而 Junit 能很好的解決這個(gè)問題,簡化單元測試,寫一點(diǎn)測一點(diǎn),在編寫以后的代碼中如果發(fā)現(xiàn)問題可以較快的追蹤到問題的原因,減小回歸錯(cuò)誤的糾錯(cuò)難度。
?
3、Junit 的用法
一、首先下載 Junit jar 包,這里給兩個(gè)版本的百度云下載地址:
①、Junit 4.12版本 ? ?鏈接:http://pan.baidu.com/s/1c2cRqdM 密碼:hfix
②、Junit 4.8 版本 ? ? 鏈接:http://pan.baidu.com/s/1qY8WVGK 密碼:ma2u
二、下載完成之后,在項(xiàng)目中將 下載的 jar 包放進(jìn)去,然后右鍵,Build--->Add Build Path ?即可。
?
? 如果你是用 eclipse 開發(fā),也可以不用下載那些jar包,eclipse內(nèi)部集成了,我們只需要引入即可:
①、選中項(xiàng)目,右鍵Build--->Add Library
?
②、彈出來的界面,選中 JUnit,點(diǎn)擊 next
?
? ③、選中 Junit 的版本,一般我們都用 4.0 以上的。點(diǎn)擊 Finish
?
?
?
三、我們先看下面這個(gè)例子,看一下 Junit 的用法
①、編寫代碼(需要測試的類)
?
public class Calculator {/*** 傳入兩個(gè)參數(shù),求和* @param a* @param b* @return*/public int add(int a,int b){return a+b;}/*** 傳入兩個(gè)參數(shù),求差* @param a* @param b* @return*/public int sub(int a,int b){return a-b;}}②、編寫測試類
一、不用Junit
public class CalculatorTest {public static void main(String[] args) {Calculator c = new Calculator();//測試 add()方法int result = c.add(1, 2);if(result == 3){System.out.println("add()方法正確");}//測試 sub()方法int result2 = c.sub(2, 1);if(result2 == 1){System.out.println("sub()方法正確");}} }那么我們可以看到,不用 Junit 只能寫在 main()方法中,通過運(yùn)行結(jié)果來判斷測試結(jié)果是否正確。這里需要測試的只有兩個(gè)方法,如果有很多方法,那么測試代碼就會變得很混亂。
?
二、使用 Junit(看不懂 Assert.assertEquals()方法沒關(guān)系,可以自己寫 if()語句來判斷)
public class CalculatorTest {@Test//測試 add()方法public void testAdd(){Calculator c = new Calculator();int result = c.add(1, 2);Assert.assertEquals(result, 3);}@Test//測試 sub()方法public void testSub(){Calculator c = new Calculator();int result = c.sub(2, 1);Assert.assertEquals(result, 1);}}如何運(yùn)行 Junit呢?鼠標(biāo)放在需要測試的方法中,右鍵,Run As ---->JUnit Test
?
結(jié)果出現(xiàn)如下的綠色橫條,則測試通過,紅色橫條,則測試失敗
?
那么由上面可以看到,使用 Junit 不需要?jiǎng)?chuàng)建 main() 方法,而且每個(gè)測試方法一一對應(yīng),邏輯特別清晰。可能有讀者會問,這樣寫代碼量也并不會減少啊,那么你接著往下看:
?
首先介紹 Junit 的幾種類似于 @Test 的注解:
1.@Test: 測試方法
a)(expected=XXException.class)如果程序的異常和XXException.class一樣,則測試通過
b)(timeout=100)如果程序的執(zhí)行能在100毫秒之內(nèi)完成,則測試通過
2.@Ignore: 被忽略的測試方法:加上之后,暫時(shí)不運(yùn)行此段代碼
3.@Before: 每一個(gè)測試方法之前運(yùn)行
4.@After: 每一個(gè)測試方法之后運(yùn)行
5.@BeforeClass: 方法必須必須要是靜態(tài)方法(static 聲明),所有測試開始之前運(yùn)行,注意區(qū)分before,是所有測試方法
6.@AfterClass: 方法必須要是靜態(tài)方法(static 聲明),所有測試結(jié)束之后運(yùn)行,注意區(qū)分 @After
?
?那么上面的例子,我們可以看到,每個(gè) @Test 方法中都有?Calculator c = new Calculator();即類的實(shí)例化,那么我們可以將其放入到 @Before 中
?
public class CalculatorTest {Calculator c = null;@Beforepublic void testBeforeClass(){c = new Calculator();}@Test//測試 add()方法public void testAdd(){int result = c.add(1, 2);//Assert.assertEquals(result, 3);//等價(jià)于:if(result == 3){System.out.println("add()方法正確");}}@Test//測試 sub()方法public void testSub(){int result = c.sub(2, 1);//Assert.assertEquals(result, 1);//等價(jià)于:if(result == 1){System.out.println("sub()方法正確");}}}
同理:別的注解用法我們用一個(gè)類來看:
public class JunitTest {public JunitTest() {System.out.println("構(gòu)造函數(shù)");}@BeforeClasspublic static void beforeClass(){System.out.println("@BeforeClass");}@Beforepublic void befor(){System.out.println("@Before");}@Testpublic void test(){System.out.println("@Test");}@Ignorepublic void ignore(){System.out.println("@Ignore");}@Afterpublic void after(){System.out.println("@After");}@AfterClasspublic static void afterClass(){System.out.println("@AfterClass");} }結(jié)果為:
@BeforeClass 構(gòu)造函數(shù) @Before @Test @After @AfterClass
注意:編寫測試類的原則:
?①測試方法上必須使用@Test進(jìn)行修飾
? ? ? ? ②測試方法必須使用public void 進(jìn)行修飾,不能帶任何的參數(shù)
? ? ? ? ③新建一個(gè)源代碼目錄來存放我們的測試代碼,即將測試代碼和項(xiàng)目業(yè)務(wù)代碼分開
? ? ? ? ④測試類所在的包名應(yīng)該和被測試類所在的包名保持一致
? ? ? ? ⑤測試單元中的每個(gè)方法必須可以獨(dú)立測試,測試方法間不能有任何的依賴
? ? ? ? ⑥測試類使用Test作為類名的后綴(不是必須)
? ? ? ? ⑦測試方法使用test作為方法名的前綴(不是必須)
?
總結(jié)
以上是生活随笔為你收集整理的Junit 入门使用教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再议HTML5离线浏览
- 下一篇: java-net-php-python-