Android UnitTest

Android 的單元測試感受比java的單元測試更難一些(多是由於我比較菜...),我想不少小夥伴也是這麼認爲的吧, 如今作Android開發,大部分的人都是直接就開搞, 無論它三七二十一,先把功能實現再說, 什麼文檔,單元測試都是浮雲.java

下面我想帶你們瞭解一下Android裏面的單元測試(比較簡單的功能方法的測試).好比在個人Android項目中, 有一個對一些數據進行特殊的分組處理, 那麼我想測試我寫的這個分組處理的方法是否是正常的,那麼在Android中就能夠利用單元測試進來測試.android

要想在Android 中使用單元測試, 那麼一件事情是絕對不對忽視的數組

在Android 中簡單的單元測試能夠分"四部曲"來完成
app

  1. 先新建一個Android 工程工具

  2. 在AndroidManifest.xml文件中進行註冊.這一步很是之關鍵,單元測試

  3.  (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進行單元測試, 這就有點複雜,但願你們一塊兒進步,共同窗習

相關文章
相關標籤/搜索