生活随笔
收集整理的這篇文章主要介紹了
JUnit+JMockit单元测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、簡介 對編碼完成的功能,進行
測試,是每個程序員最熟悉不過的事了,每完成一部分功能,都需要對實現的功能進行測試,然后才能進行交付。但如何保證自己完成的每個功能都是正確無誤的呢?對,
單元測試!
2、JUnit 2.1 pom中增加Junit的jar的依賴 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> </dependency> 2.2 增加單元測試類 例如,要測試的類為src下的com.runqianapp.userManager.dao.UserDao類中的 publicStringgetUserName(StringuserId)方法 則首先新建一個
test的源碼目錄,原因是測試代碼要與原功能代碼分離,自動構建的時候,只需要把原功能的代碼構建到最新的jar里。然后新建跟被測試類相同的包路徑,如 test下的com.runqianapp.userManager.dao.UserDaoTest 這樣,就為UserDao建好了一個單元測試類, 對于被測試的方法,需要傳不同的參數,來檢驗方法的正確性,這個時候,不必寫多個@Test來測試,而是把需要傳入的參數放入配置文件,然后讀配置文件。 參數配置文件的位置是與單元測試類同一目錄下,如 test下com.runqianapp.userManager.dao.testData_UserDao 2.3 JUnit的常用注解介紹 2.3.1 @Test 需要運行的單元測試方法,可以有多個 2.3.2 @Before 在每一個@Test方法運行之前都會被運行,可以用來初始化方法 2.3.3 @Before 在每一個@Test方法運行之后都會被運行,可以用來方法的釋放資源 2.3.4 @BeforeClass 針對整個單元測試類,只會被運行一次,在所有方法運行之前被運行,可以用來初始化環境 必須聲明成staticvoid 2.3.5 @AfterClass 針對整個單元測試類,只會被運行一次,在所有方法運行之后被運行,可以用來釋放資源
必須聲明成staticvoid2.4 斷言 對于需要測試的方法,用斷言來判斷其它執行結果是否正確。 assertEquals([Stringmessage],expected,actual) message是個可選的消息,將會在發生錯誤時報告這個消息。 expected是期望值,通常都是用戶指定的內容。 actual是被測試的代碼返回的實際值。 如: booleansuccess=update(); assertEquals(“更新是否成功”,true,success) 這樣,當運行update()的返回值不為true的時候,這個單元測試就會失敗。 但有些時候,我們測試的方法并沒有返回值,方法只是執行一個動作,那么這個時候,我們就不能用判斷的返回值來判斷方法是否執行成功。 如新建文件的方法,publicvoidcreateFile(StringfilePath),這個時候,方法并沒有返回值,我們在判斷方法是否執行成功的時候,可以寫一個輔助方法,來檢查一下指定的文件是否新建成功了,以此來驗證createFile()的準備性。如:
| createFile(“d:/a.txt”); booleanexist=fileExist(“d:/a.txt”); assertEquals(“新建文件”,true,exist); |
3、JMockit 當我們在編寫單元測試的時候,常常會出現一些如調用的方法需要其它對象提供,而這個類現在又不具備,如很難創建、沒有環境、沒有開發完等情況,這個時候,我們就需要用JMockit模擬出一個類,來滿足我們的需求,來完成我們核心功能的測試。 3.1 pom中增加JMockit的依賴
| <dependency> <groupId>jmockit</groupId> <artifactId>jmockit</artifactId> <version>1.0</version> <scope>test</scope> </dependency> |
3.2 模擬對象 如需要測試的一個方法的一個值是配置在misInitConfig.xml中的,而misInitConfig.xml中的值需要用ReadConfInfo.getPropery()來獲取,而ReadConfInfo是在應用啟動時初始化的,這個時候并沒有web環境,也不能初始化,而我們也不需要自己手動初始化ReadConfInfo,因為我們測試的重點不是ReadConfInfo,而是我們現有的功能。這個時候,我們就可以用JMockit模塊出ReadConfInfo,來完成此功能的測試。
| /** *模擬ReadConfInfo */ publicstaticvoidmockReadConfInfo(){ newMockUp<ReadConfInfo>(){ @Mock publicStringgetPropery(StringpropertyName){ if("conf_loglevel".equals(propertyName)){ return"debug"; }elseif("conf_logfolder".equals(propertyName)){ return"log"; }else{ return""; } } } } |
在單元測試的@BeforCalss中初始化,
| /** *初始化環境 */ @BeforeClass publicstaticvoidinit()throwsException{ //模擬ReadConfInfo mockReadConfInfo(); } |
這樣,我們就可以在程序中使用ReadConfInfo.getPropery()來完成我們的功能了。
最新內容請見作者的GitHub頁:http://qaseven.github.io/
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的JUnit+JMockit单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。