Android 的單元測試感受比java的單元測試更難一些(多是由於我比較菜...),我想不少小夥伴也是這麼認爲的吧, 如今作Android開發,大部分的人都是直接就開搞, 無論它三七二十一,先把功能實現再說, 什麼文檔,單元測試都是浮雲.java
下面我想帶你們瞭解一下Android裏面的單元測試(比較簡單的功能方法的測試).好比在個人Android項目中, 有一個對一些數據進行特殊的分組處理, 那麼我想測試我寫的這個分組處理的方法是否是正常的,那麼在Android中就能夠利用單元測試進來測試.android
要想在Android 中使用單元測試, 那麼一件事情是絕對不對忽視的數組
在Android 中簡單的單元測試能夠分"四部曲"來完成
app
先新建一個Android 工程工具
在AndroidManifest.xml文件中進行註冊.這一步很是之關鍵,單元測試
(1) < uses-library android:name ="android.test.runner" /> (2) <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.androidjunittest" android:label="@string/app_name" />
a. 在這段代碼中 與application 標籤同級添加instrumentation標籤,其中 targetPackage 是填寫當前項目的包名,label就填寫項目名稱.學習
b. 在application標籤裏面添加先要給這個項目加上一個library庫, uses-library (注意是application的子標籤)測試
4. 在Android 中 , 咱們可能會涉及到很複雜的業務邏輯, 若是你不肯定咱們的邏輯代碼是否有問題, 那麼咱們可使用單元測試來驗證, 好比,我寫了一個分組的Util工具類(判斷一串數字是否連續,連續就分一組,不然另起一組) , 裏面有很些方法,比較複雜,那麼要測試咱們寫的方法,,那麼如何作呢?ui
如今我就帶你們一塊兒來體驗一下spa
package com.example.androidunittest.uitl; import java.util.ArrayList; import java.util.List; /** * 該類是對標籤進行排序分組,判斷標籤之間是否連續,若是連續,就將標籤分在同一組, * 不然,爲另外一組 * @author DELL * */ public class TagsGroupUtil { /** * 1. 將獲得的序列號截取字符後,轉換爲Long類型數據 * @param seq * @return */ public static long transformSeqToInteger(String seq){ return Long.parseLong(seq.substring(1)); } /** * 2. 轉換爲long類型後對數組進行排序 * @return */ public static long[] sortSeq(long[] arr){ for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { long temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } /** * 3. 對排序後的數組進行分組,判斷 是否爲連續數,是連續數就分爲一組 * @param arr * @return */ public static List<List<Long>> doGroupBySeries(long[] arr){ List<List<Long>> myGroup = new ArrayList<List<Long>>(); List<Long> group = new ArrayList<Long>(); //對其進行分組 for (int i = 0; i < arr.length; i++) { //TODO 對排序後的數據進行判斷,是否連續 if (i < arr.length - 1 && arr[i] + 1 == arr[i + 1]) { group.add(arr[i]); }else { group.add(arr[i]); myGroup.add(group); group = new ArrayList<Long>(); } } return myGroup; } /** * 4. 將分組後的long類型數據按分組格式轉換爲String 類型 * @param myGroup * @return */ public static List<List<String>> recoverToString(List<List<Long>> myGroup){ List<List<String>> myStrGroup = new ArrayList<List<String>>(); for (int i = 0; i < myGroup.size(); i++) { List<String> strList = new ArrayList<String>(); List<Long> longList = myGroup.get(i); for (int j = 0; j < longList.size(); j++) { strList.add(String.valueOf(longList.get(j))); } myStrGroup.add(strList); } return myStrGroup; } /** * 5. 將String 還原爲原來的序列號格式 形式 * @param myStrGroup * @return */ public static List<List<String>> recoverStringToSeq(List<List<String>> myStrGroup){ List<List<String>> recoverGroup = new ArrayList<List<String>>(); //還原後的集合 for (int i = 0; i < myStrGroup.size(); i++) { List<String> list = new ArrayList<String>(); List<String> mystrList = myStrGroup.get(i); String str = ""; for (int j = 0; j < mystrList.size(); j++) { String myStr = mystrList.get(j); //不足9位拼接9位 StringBuffer apStr = new StringBuffer("X"); for (int l = 0; l < 9 - myStr.length(); ++l) { apStr.append("0"); } str = mystrList.get(j); str = apStr.toString() + str; // for (int k = 0; k < 9; k++) { // if (myStr.length() < 9) { //// myStr = "0" + myStr; // myStr.insert(0, "0"); // } else { // break; // } // } // myStr = "X" + myStr; //還原序列號 list.add(str); } recoverGroup.add(list); } return recoverGroup; } }
下面咱們就對doGroupBySeries() 方法進行單元測試, 要繼承AndroidTestCase類,
package com.example.androidunittest.test; import java.util.List; import junit.framework.Assert; import android.test.AndroidTestCase; import com.example.androidunittest.uitl.TagsGroupUtil; public class TestFunc extends AndroidTestCase{ public void testDoGroupBySeries(){ long[] arr = new long[]{1,2,3,4,7,8,9,11,16}; //固然,這裏你能夠隨意定義 List<List<Long>> list = TagsGroupUtil.doGroupBySeries(arr); //實際應該分爲四組 1234 , 789 , 11 , 16 Assert.assertEquals(5, list.size()); //斷言返回的集合大小是否爲4, 若是是4,證實咱們的方法是正確的邏輯, } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidunittest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name ="android.test.runner" /> <activity android:name="com.example.androidunittest.MainActivity" 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 android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.androidunittest" android:label="@string/app_name" /> </manifest>
運行時, 選擇項目工程: run as --> Android JUnit Test 就能夠了, 而後切換到JUnit視圖查看運行結果
這只是簡單的功能方法的單元測試, 如何對一個Activity進行單元測試, 這就有點複雜,但願你們一塊兒進步,共同窗習