Android應用開發中如何進行單元測試

本文轉自:http://blog.csdn.net/cjjky/article/details/7539257

本文主要和大家分享如何在Android應用開發過程中如何進行單元測試,個人在做項目的過程中,覺得單元測試很有必要,以保證我們編寫程序的正確性。下面我們先大概瞭解下單元測試,以及單元測試的作用。

         單元測試(又稱爲模塊測試)是針對程序模塊(軟件設計的最小單位)來進行正確性檢驗的測試工作。程序單元是應用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數、過程等;對於面向對象編程,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。單元測試是由程序員自己來完成,最終受益的也是程序員自己。可以這麼說,程序員有責任編寫功能代碼,同時也就有責任爲自己的代碼編寫單元測試。執行單元測試,就是爲了證明這段代碼的行爲和我們期望的一致。

         其實我們每天都在做單元測試。你寫了一個函數,除了極簡單的外,總是要執行一下,看看功能是否正常,有時還要想辦法輸出些數據,如彈出信息窗口什麼的,這,也是單元測試,把這種單元測試稱爲臨時單元測試。只進行了臨時單元測試的軟件,針對代碼的測試很不完整,代碼覆蓋率要超過70%都很困難,未覆蓋的代碼可能遺留大量的細小的錯誤,這些錯誤還會互相影響,當BUG暴露出來的時候難於調試,大幅度提高後期測試和維護成本,也降低了開發商的競爭力。可以說,進行充分的單元測試,是提高軟件質量,降低開發成本的必由之路。

  對於程序員來說,如果養成了對自己寫的代碼進行單元測試的習慣,不但可以寫出高質量的代碼,而且還能提高編程水平。

  要進行充分的單元測試,應專門編寫測試代碼,並與產品代碼隔離。我認爲,比較簡單的辦法是爲產品工程建立對應的測試工程,爲每個類建立對應的測試類,爲每個函數(很簡單的除外)建立測試函數。

在Android應用開發中有兩種方式可以進行單元測試,下面分別展示這兩種單元測試的方法:

單元測試方式一:[基於應用的工程上進行單元測試]


根據上面的程序代碼結構圖,例如我們要測試包 com.andyidea.demo 包中的 JUnitService.java 中的某個方法的正確性。例如該對象中有個 add方法,計算兩個整型數據的和

[html] view plaincopy
  1. package com.andyidea.demo;  
  2.   
  3. public class JUnitService {  
  4.       
  5.     public int add(int a, int b){  
  6.         return a+b;  
  7.     }  
  8.   
  9. }  
然後我們在MyJnuitTest.java中編寫單元測試代碼,[注意:該測試類一定要繼承 AndroidTestCase類] 以驗證程序結果是否是我們所期望的一致
[html] view plaincopy
  1. package com.andyidea.jnuit;  
  2.   
  3. import junit.framework.Assert;  
  4. import android.test.AndroidTestCase;  
  5.   
  6. import com.andyidea.demo.JUnitService;  
  7.   
  8. public class MyJnuitTest extends AndroidTestCase {  
  9.       
  10.     public void testAdd() throws Exception{  
  11.         JUnitService js = new JUnitService();  
  12.         int sum = js.add(1, 2);  
  13.           
  14.         Assert.assertEquals(3, sum);  
  15.     }  
  16.   
  17. }  
同時我們還需要在 Manifest.xml 清單配置文件中配置下:以紅色標誌出來需要配置的地方。

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.andyidea.demo"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.       
  7.   <span style="color:#ff0000;">  <!-- 代表把單元測試框架中的一些依賴庫引入進來 -->  
  8.     <uses-sdk android:minSdkVersion="8" /></span>  
  9.   
  10.     <application  
  11.         android:icon="@drawable/ic_launcher"  
  12.         android:label="@string/app_name" >  
  13.         <uses-library android:name="android.test.runner" />  
  14.         <activity  
  15.             android:name="com.andyidea.demo.JUnitTestDemoActivity"  
  16.             android:label="@string/app_name" >  
  17.             <intent-filter>  
  18.                 <action android:name="android.intent.action.MAIN" />  
  19.   
  20.                 <category android:name="android.intent.category.LAUNCHER" />  
  21.             </intent-filter>  
  22.         </activity>  
  23.     </application>  
  24.       
  25. <span style="color:#ff0000;">    <!-- 代表配置單元測試框架的啓動裝置,啓動裝置有好幾個類,可以選擇,一般情況下我們使用上面這個。  
  26.          targetPackage與上面的package相同,代表單元測試框架和當前應用是處於同一個進程中 -->  
  27.     <instrumentation  
  28.         android:name="android.test.InstrumentationTestRunner"  
  29.         android:label="Test for my app"  
  30.         android:targetPackage="com.andyidea.demo"/></span>  
  31. </manifest>  
最後,打開eclipse中的outline窗口,其中會顯示單元測試類的所有的方法然後想要測試哪個方法,則在哪個測試方法上右鍵鼠標,選擇Run As,然後再選擇Android JUnit Test即可,如果是正常的,則會如下:


如果有異常或者錯誤,則會出現如下情況:

單元測試方式二:
其實這種方式更加簡單,這種方式是單獨創建一個單元測試的工程來進行測試。即創建一個 Android Test Project ,然後選擇需要單元測試的項目就OK了,通過這種方式進行單元測試的話就不用進行上面的配置,其實創建這種工程的時候,默認已經幫我們配置好了。如何進行測試和上面的方式一樣,在這裏就不詳細講解了。

注:本文爲 Andy.Chen 原創,歡迎大家轉載,轉載請大家註明出處,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章