2009年5月26日 星期二

Android 1.5 使用JUnit測試框架

對於一些習慣TDD開發方式的人來說
沒用JUnit好像少了什麼似的,就順便研究了一下在Android下如何使用JUnit
----------------
在Android裡面基本上有兩個方案

傳統JUnit


有需要的話可以到http://www.junit.org/ 下載
因為Android用的不是JDK在跑程式,而是用他自己的虛擬機器
所以在eclipse必須修改一下JUnit的執行環境才能跑,而且也只能跑一些java的邏輯測試或業務封裝,對於Andorid的測試不能用一般的JUnit去跑,這個可以用第二個方案解決

先介紹第一種一般JUnit的使用法,把junit-4.6.jar(版本可能有異)下載下來後
先在eclipse的 project->properties 跳出設定視窗後選擇Java Build Path->Libraries
選擇Add External JARs,把剛才下載的junit-4.6.jar加入eclipse
這個方法可用於想加入任何第三方API時使用


之後File->New->JUnit Test Case新增一個TestCase
假設程式碼如下

public class TestActor extends TestCase{

public TestActor(String name){
super(name);
}
public void testAction(){
assertEquals(true, true);//請修改為自己的測試程式
}

}

----
之後開啟Run Configutrations(不知道請參照使用eclipse開發Andrio 1.5)

開啟視窗後請先依序幾個步驟
  1. 先在左邊的JUnit那欄點兩下,會出現右邊這種設定卡,先選Test這個Tag
  2. 再來取個喜歡的名子
  3. 這個步驟比較重要,選定要執行的測試類別
  4. 選定Junit版本
  5. 點選Apply
再來跳到Classpath這個Tag,一開始會看到Bootstrap Entries是Android 1.5(版本可能有異)

請點選Android 1.5 後按下 Advanced 將他改成JRE



他會先跳出一個Advanced Options的選單,選則Add Classpath Variables後按下OK




他會又跳出一個選單,選擇你的JRE環境後按下OK,在此我的是JRE_LIB


最後在Bootstrap Entries上就會出現JRE的環境,這邊要注意一下User Entries有沒有Junit
沒有的話用Add External JARs將他加進來,之後按下Apply




之後再要測試的Testcast calss上按右鍵 Run As->JUnit Test就可以跑了


如果出現詢問視窗的話,先在Override workspace setting上打勾
而後選擇Eclipse JUnit Launcher按下OK就行了



注意一下Run的選單


這是1.5後才出現的,以後或許會再改也不一定,畢竟Android現在比起J2ME等仍然是不夠完善

Android JUnit Test


這是第二個方案,專門給Android專案作測試用的,Android的APIDemo裡面就有很詳盡的用法
註:1.5版後的ApiDemo範例改放到
android-sdk-windows-1.5_r1\platforms\android-1.5\samples目錄底下


-----
Android JUnit Test用法一樣是到Run Configutrations下產生一個新的JUnit的Config出來
不同的是程式寫法
首先一定要有繼承Activity的類別

public class Game extends Activity {
.....
}

然後寫測試程式,他必須繼承ActivityInstrumentationTestCase,而且泛型樣版必須放進一個繼承 Activity的類別

public class Test extends ActivityInstrumentationTestCase<Game> {
public Test(){
super("com.android.ut", Game.class);
}

public void testRun()
{
assertEquals(true, true);
}
}


這裡有一點要注意
super("com.android.ut", Game.class);
super第一個參數一定要是你專案的package名稱,不然跑出來結果會錯誤,在此我是隨便舉的例


之後我產生一個JUnit的Config,用預設的就好
再來最重要的是修改AndroidManifest.xml設定檔

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.cusano.star"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Game"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="org.cusano.star"
android:label="Tests "/>

<uses-sdk android:minSdkVersion="3" />
</manifest>


-----------
用顏色標住起來的地方就是我們要加進去的東西
<uses-library android:name="android.test.runner" />

是跟Android說要引進這個lib,不然Android不知道
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="org.cusano.star"
android:label="Tests "/>



有三個屬性,第一個屬性是固定的,targetPackage屬性要填專案當初設定的package名稱
label屬性則是在Android會看到的標籤


再來就可以選擇第一個Android JUnit Test去Run了

在此之前,可以叫出Logcat去觀察他的結果,Logcat是Android很好用的工具,可以幫忙觀察很多錯誤,叫出方法,Window -> Show View -> Other,找Android -> LogCat


在跑Android JUnit Test他會去叫出模擬器(avd記得先設定好),之後可以去Dev Tools下的Instrumentation,找到我們的測試程式,名子是AndroidManifest.xml當初設定label屬性,也就是Tests







按下去後就可以在Eclipse或是Logcat上面看結果

沒有留言: