Junit4 简单教程
一、環(huán)境搭建
?????? 對于習慣使用Eclipse開發(fā)平臺來說,Junit早已是非常通常的插件,在Eclipse開發(fā)平臺中,可以非常方便地搭建Junit測試環(huán)境。
?????? 1、在Eclipse上創(chuàng)建工程,任何Java工程都行。
???????2、引入Junit的libraries庫,選用Junit4。如下圖所示:
3、新建一個Java類,用于演示Junit4類的自動生成,java代碼如下:
[java]view plaincopy4、在該類上右鍵單擊新建,選JUnit Test Case,自動生成一個對應(yīng)的測試類,如下圖所示:
4、這樣就能自動地生成對應(yīng)的測試類了,測試類代碼發(fā)下:
5、如此一來,測試類環(huán)境的搭建過程就完成了,最后要做的就是,根據(jù)實際的業(yè)務(wù)需求,對測試類中的測試方法編寫單元測試代碼,直到運行調(diào)通。
?
二、基本規(guī)則
?????? 從上面的演示可知,測試類名一般都以Test結(jié)尾,測試方法名以test開頭。這個也是Junit的基本命名規(guī)則。
?
三、Junit注解
??????我們此次針對的是Junit4版本,注解也是在Junit4版本才有的,之前的版本并無注解功能。而注解開發(fā)基本上被認為是一種優(yōu)秀的設(shè)計,所以我們寫單元測試用例時,盡可能地去了解并使用注解。
?????@Test:使用該注解的方法為測試方法,自動運行時能夠識別并被執(zhí)行
??????包含兩個參數(shù):expected=XXXException.class 期望出現(xiàn)的異常
???????????????????????????????timeout=xxx 設(shè)定程序運行的超時時間
?????@Ignore:被忽略的測試方法
???? @Before:在每個測試方法之前運行
???? @After: 在每個測試方法之后運行
?????@BeforeClass:在所有測試開始之前運行
?????@AfterClass:在所有測試開始之后運行
??
????? 以上幾個就是Junit 4的關(guān)鍵注解,熟練使用這幾個注解,將來的測試用例編寫肯定能事半功倍。
?????注意:@Before與@BeforeClass的區(qū)別
?????@Before會加在每個方法前執(zhí)行,即有幾個@Test就會執(zhí)行幾遍。
???? @BeforeClass 只在所有測試之前執(zhí)行,只會執(zhí)行一次。并且@BeforeClass修飾的方法必須是公有的靜態(tài)方法(public static )。
?????@After和@AfterClass也類似
???? 每個測試類中這四個注解不能重復(fù)使用,一個方法只能從這四個注解中挑選其中一個。
?
四、基本寫法
?????? 1、setUp(),tearDown(),setUpBeforeClass(),tearDownAfterClass()這四個方法其實就是對應(yīng)的@Before、@BeforeClass、@After、@AfterClass這四個注解,在Junit4開始使用注解時,其實可以替代這四個方法的功能,只是這四個方法是歷史遺留方法,可以考慮使用,也可以直接使用注解替代。
???????2、Assert是單元測試用例的核心,建議使用靜態(tài)導(dǎo)入。
?????? 3、待測試對象,一般建議設(shè)計成靜態(tài)的。
?????? 4、測試方法的要求:帶@Test注解,方法名隨意,返回值必須為void,不能帶有參數(shù),可以聲明異常(可以參考演示代碼)。
?????? 5、Fixture方法的作用
????????????前面介紹的@Before、@BeforeClass、@After、@AfterClass注解修飾的方法,即為Fixture方法,它是在某些階段必然被調(diào)用的方法,如注解功能所示。
????????????@Before、@After修飾方法的一個用處是對待測試對象的“復(fù)原”操作,如成員變量回歸,數(shù)據(jù)庫回滾等,目的是消除@Test方法之間的耦合。也可以用來打印日志。
??????????? @BeforeClass修飾方法可以設(shè)計成用來加載一些耗時耗力的操作,如文件流的讀取,數(shù)據(jù)庫連接等,然后在@AfterClass中釋放對應(yīng)的資源即可。
??????6、限時測試
?????????? @Test(timeout=1000)超時時間單位為毫秒
?????????? 用于測試是否有死循環(huán)工是實時性要求比較高的用例,這個非常方便而且非常有用。
??????7、測試異常
??????????? @Test(expected=XXXException.class) XXXException為聲明式異常
??????????? 用來驗證聲明式異常,注意此測試的含義:出現(xiàn)了期望的異常,叫做正常,若沒出現(xiàn)異常,Junit會報錯,認為不正常。這段描述有些拗口,請各位多琢磨琢磨。
????? 8、運行器Runner
??????????? 類注解@RunWith,指定不同的類可以改變測試類的行為
????? 9、參數(shù)化測試
??????????? 主要是針對一些相同功能卻要進行多組參數(shù)測試的情況,開發(fā)步驟如下:
??????????? 1)參數(shù)化測試的類和普通測試類不同,要用特殊的Runner,類注解需要改為@RunWith(Parameterized.class)
????????????2)定義該測試類的成員變量,一個放測試參數(shù),另一個放該參數(shù)產(chǎn)生的預(yù)期結(jié)果
??????????? 3)定義測試數(shù)據(jù)集合方法 public static Collection data() {...},注意該方法要用@Parameters修飾(數(shù)據(jù)格式為二維數(shù)組)
??????????? 4)定義帶參數(shù)的構(gòu)造函數(shù),注意定義數(shù)據(jù)集合時,要和構(gòu)造函數(shù)參數(shù)次序一致
??????????? 其他的與普通測試類似
??????????? 注意:若測試數(shù)據(jù)有兩條,則該類下的所有@Test的方法都會執(zhí)行兩次,所以參數(shù)化測試的類不要和別的@Test放在一起。參數(shù)化測試方法一般建議單獨建立類。
??????????? 演示代碼如下:
[java]view plaincopy?????? 預(yù)期的執(zhí)行結(jié)果是前兩組參數(shù)測試正確,最后一組測試錯誤,運行后的結(jié)果為:
執(zhí)行結(jié)果與預(yù)期結(jié)果相符合,OK
?
??????10、打包測試
??????????? 將測試類集中起來運行,提高測試效率,代碼如下:
[java]view plaincopy?????????? 1)@Suite.SuiteClasses里面的是需要打包測試的類
?????????? 2)該類中可以為空,類名建議為模塊名+Test結(jié)尾,如ModuleTest.java
????? 以上是Junit4的最基本的使用,相信掌握了這些,對于編寫常規(guī)的測試用例已經(jīng)不是難事,同樣,Junit還有更多更有意思的功能等待我們?nèi)ネ诰颉?/p>
總結(jié)
以上是生活随笔為你收集整理的Junit4 简单教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java连接postgresql数据库
- 下一篇: postgresql 比较两个时间差大于