像以前學習Java時用單元測試檢查自己寫的方法是不是能行得通一樣,android也可以進行單元測試來檢查自己寫的方法來排除障礙。下面就來詳細說說單元測試的過程。
首先建立一個android的工程JunitTest,選擇的android版本為2.2.3,由於單元測試直接在MyEclipse中進行而不是在應用程式中進行,因此你不必選擇建立“activity”(想一想這與activity有什麼關係呢?)接著在項目的AndroidManifest.xml添加如下所示黑體加粗的代碼,注意代碼的順序:
…………. <uses-sdk android:minSdkVersion="10"/> <instrumentationandroid:name="android.test.InstrumentationTestRunner" android:targetPackage="com.yqsn.junittest"></instrumentation> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner"/> <activity android:name=".JunitTestActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>………………………….
這段代碼的意思是:
●instrumentation為單元測試的入口。由於我們每次啟動項目時程式都會啟動一個application執行個體,因此需要載入一個activity,而activity是有圖形介面的。我們單元測試只是測試代碼,因此,你可以把instrumentation看成是一個沒有圖形介面、監控其他類的工具類。
●android.test.InstrumentationTestRunner為單元測試的主要類,android:targetPackage裡面寫的是哪個包下要測試的類。
●uses-library要與activity處於同一級。注意的是instrumentation與uses-library中的android:name都不要寫錯。
下面開始寫測試類別,注意測試類別必須繼承AndroidTestCase類,代碼如下所示:
package com.yqsn.junittest; import junit.framework.Assert;import android.test.AndroidTestCase;import android.util.Log; public class JunitTestDemo extends AndroidTestCase { publicvoid testSave() throws Throwable{ inti=1+1; Assert.assertEquals(3,i); }}
現在開始測試,我們在MyEclipse中開啟outline視圖,在outline視圖我們可以清楚的看見我們的測試類別JunitTestDemo,展開這個類,又可以看見要測試的方法,我們測試則只需要對著這個方法右鍵選擇Run As—>Android Junit Test,如下所示,
由於在這個類中我們只是測試i是否等於3,因此顯然是不相等的,因此我們運行後會在junit控制台看到紅色的標誌:
我們將 Assert.assertEquals(3,i);方法中的3改為2,則會顯示綠色通過的標誌:
如果出錯了我們怎麼解決呢?你也許會想到查看控制台console,但是會讓你很失望的是控制台不會列印出字串,例如你想通過在方法中System.out.println(“Hello World !”)輸出“Hello World !”,控制台除了輸出應用安裝資訊你不會看到其他資訊。那麼怎麼辦呢?
在android中我們通過android.util.Log類中的靜態方法查看輸出資訊。Log類輸出日誌的內容從少到多分別是ERROR,WARN,INFO,DEBUG,VERBOSE,對應的方法分別是Log.e(),Log.w(),Log.i(),Log.d(),Log.v()這5個靜態方法,不說你也知道是什麼意思。
下面開始編寫日誌輸出測試來,我們將前面那個類改編一下,代碼如下所示:
package com.yqsn.junittest; import junit.framework.Assert;import android.test.AndroidTestCase;import android.util.Log; public class JunitTestDemo extends AndroidTestCase { privatestatic final String HTC=" JunitTestDemo "; publicvoid testSave() throws Throwable{ inti=1+1; Log.i(HTC,"i="+i); Assert.assertEquals(2,i); }}
這裡面用到的Log.i(String tag,String msg)中的tag指的是為這條資訊定義一個標籤,一般命名與類名相同,這樣方便查看是哪個類輸出的。而msg則表示要輸出的內容。
下面開始測試,與單元測試步驟一樣。接下來查看日至資訊。我們開啟LogCat選項卡,如下所示:
我們點擊Saved Filter邊上的“+”,則會彈出一個過濾框。我們在Filter Name中輸入定義的常量名”HTC”,在by Log Tag中則輸入標籤,也就是類名“JunitTestDemo”,如下所示:
點擊“ok”儲存之後,點擊HTC,選擇“info”,則會看到輸出的結果!
好了,單元測試與日誌輸出就介紹這麼多了,下節將好好學習debug。
這是本人學習的結果,歡迎轉載,歡迎交流,但轉載務必給出本文章的連結地址:http://blog.csdn.net/youqishini/article/details/7437619,謝謝~