沒用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時使用
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj48XdGSjstnSxnEDnIR6flLOVywBb5_XaeZr3fIeP1n3qMNpKsce26dHTSrl7sANa75LrqmPBG5zlZ01Xmmfz_o01NKywUAWvmLRxXWcqJxCsDrxXFC8NSjXjIKETAy5WRW0MFJozrn7c/s320/1.jpg)
之後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)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL59FTVl_BKnlES3C-8ANVlR8raKBMv6-NchTvofVTxCgEUl59tbFILdruZtgie0_YZ1FMcz7hsL_kv7E30z3TfPX8rdbJDBKy_jMbiCC86r9KKbexrCeei-sngtMjGlq2z0BO3gpfAF8/s320/1.jpg)
開啟視窗後請先依序幾個步驟
- 先在左邊的JUnit那欄點兩下,會出現右邊這種設定卡,先選Test這個Tag
- 再來取個喜歡的名子
- 這個步驟比較重要,選定要執行的測試類別
- 選定Junit版本
- 點選Apply
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkpCvlmYedh89-scB6XFrshLwBaOeEdPh7UsidKGW7vlj-YBsXbhKDhQm5pawmstnE3MLFk5ZRiskDqh3pFJxo-DoqdRXxK8ss19Rtp_KwDmI3B2nCtpFKdpK8ZhlP8niohvXfTn4tQug/s320/1.jpg)
請點選Android 1.5 後按下 Advanced 將他改成JRE
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf4I74JACcyjqawPl4LMcJHppZnycFZC8gVx7B7ToBrjVoapMwizdgnnefSEh6ZUODNxDp7s539SbxUGUJBm_kfg6Ry9F7DWJXUf1RE1eijq49OVlltNvfn43PfbkzULMZUwPA82DigVs/s320/1.jpg)
他會先跳出一個Advanced Options的選單,選則Add Classpath Variables後按下OK
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr9H5TdiAoNit1JY3FttAVcEu2Gy-d4wx4QHcXI3E3KHvKCa1H7l3W0AQgiTBmcsXZ-2632V8XWJzwXjKMSmIotZ11Fpb9IQ3s0enL2mU-Px2oELvZ4h0cJte8CCSorADXMscYBPDwgqk/s320/1.jpg)
他會又跳出一個選單,選擇你的JRE環境後按下OK,在此我的是JRE_LIB
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyXzH9qnQ-avRJrlCOuEDiUSRGhuk-ysJun9iGVcVndanvpRz8NRavCuv7GWDO_e2WtxxjLpPKGbk3ugAbetCuutu52TVvnDVZB55vZpGMp97DvW8u5tELlyPZjhEAqPyZBN2S8cIU4wo/s320/1.jpg)
最後在Bootstrap Entries上就會出現JRE的環境,這邊要注意一下User Entries有沒有Junit
沒有的話用Add External JARs將他加進來,之後按下Apply
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7mPW0SF-1BnY7RinH29fgT37QDasOHQTEXNXsUV0Lv3MrvN4nHLoykbMexOTrBHWkiaQemhD_qAZwzDnWaLOF-CA88SOd5-kXxx5yTaW_wWGcjt1TPX6QsXHI9GlWhku9CdqDfJRIQJs/s320/1.jpg)
之後再要測試的Testcast calss上按右鍵 Run As->JUnit Test就可以跑了
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZIJSJXatwQmJfwwXOdWkgBk07YA_r3D2gswHKAvrhZL8A5sus_J7qBjUoa21l0QJG_84NnhAwWVziMVcXofuf6PbbiBTk7kHyQmLgBRG0AZEfWF-eWjOgwo3RmmIA6W4DOBX8T3gt6Ck/s320/1.jpg)
如果出現詢問視窗的話,先在Override workspace setting上打勾
而後選擇Eclipse JUnit Launcher按下OK就行了
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcEvYeoxOKCmduvXeef4eWZDOyUUI6PadIl2L-46wGzcwrnvVpIEQlEZuh5JbbPxVjmSy6V5ACH26BR299a0vFGM4udD3XuS1vODd9BNzWak-x4x2-5aBysg3rIDS7dtne9f9z1gPDZ2w/s320/1.jpg)
注意一下Run的選單
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJxzUCLQDlv_DG1NhfjMXbfER25mLc91lfMY_7ZymAaNCHM9kU12crCIOMJQDFX4M170Su2vZ7lOwHDkL0hQ-5OgOD17xU-kghMRefGyvc7MblDd7sf3hVZqLCuwvCWMP8JlFhDaSxXoI/s320/1.jpg)
這是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名稱,不然跑出來結果會錯誤,在此我是隨便舉的例
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0BM0pzr0S30a-WKdTloLHHvjP0mGZVqIXTKO6HFEhAYAdTZygYyisL5JtpMLifE1ggDVn-pW9ezisBCitmVFbCMGebu4FAp7w51izlowfphuOApmX0G0tDe_e6sOTrYNYV79Nzf1BnkI/s320/1.jpg)
之後我產生一個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會看到的標籤
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJxzUCLQDlv_DG1NhfjMXbfER25mLc91lfMY_7ZymAaNCHM9kU12crCIOMJQDFX4M170Su2vZ7lOwHDkL0hQ-5OgOD17xU-kghMRefGyvc7MblDd7sf3hVZqLCuwvCWMP8JlFhDaSxXoI/s320/1.jpg)
再來就可以選擇第一個Android JUnit Test去Run了
在此之前,可以叫出Logcat去觀察他的結果,Logcat是Android很好用的工具,可以幫忙觀察很多錯誤,叫出方法,Window -> Show View -> Other,找Android -> LogCat
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS__0QkPS4WEqhi6mnfLgml59YgMvzWCh7BhfMOKvp4lQqhp_ssavFigCi7E2j9vbCE7yvy3rP4ZdPuVbkDnOFsPdHnLtyIQPBF7EP2E_7MlSK2QRFIcGkBAcS3STFmpCUr38PccVNO1o/s320/1.jpg)
在跑Android JUnit Test他會去叫出模擬器(avd記得先設定好),之後可以去Dev Tools下的Instrumentation,找到我們的測試程式,名子是AndroidManifest.xml當初設定label屬性,也就是Tests
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJLQjlLoiZLclnU9zCs3dvO1NaF4vQB5V4_kLUGCkBxICeKArpTYIESoK_wz8yMZVIoF2bYeRNd416FJO0CqT3w8ynTkw_OPqK9FlT9pmj_pZkci0Hb60Kd67WFGjCVDHBG3HoyAA1pfo/s320/1.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFBVzRNusc81Emt4DKY4c44-rEyFXla3PgB0SQ7t7MN0Fr0lZa9vMheAY3PpsDix1yeW4Rrv03zEeT8OEPbOIaQEQS60i6099z_o4iU2YCtYEWhj20WB74UpP2gBLPEB6pL-Ih-pIESsI/s320/2.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivVDltW1znv1MMBg9cg55LUmeGQwE9XMPsMnB57siN6W7SbZgniFll7ywKhU1ALWxYSqZCt2RjmHn5rB3JfwA8ptVdIiJzc3o4mq8sOnSpBELtGFTvfWRW0fC0m-v9pB53oIXEElThCDw/s320/3.jpg)
按下去後就可以在Eclipse或是Logcat上面看結果
沒有留言:
張貼留言