Android UnitTest
Android 的单元测试感觉比java的单元测试更难一些(可能是因为我比较菜...),我想很多小伙伴也是这么认为的吧, 现在做Android开发,大部分的人都是直接就开搞, 不管它三七二十一,先把功能实现再说, 什么文档,单元测试都是浮云.
下面我想带大家了解一下Android里面的单元测试(比较简单的功能方法的测试).比如在我的Android项目中, 有一个对一些数据进行特殊的分组处理, 那么我想测试我写的这个分组处理的方法是不是正常的,那么在Android中就可以利用单元测试进来测试.
要想在Android 中使用单元测试, 那么一件事情是绝对不对忽视的
在Android 中简单的单元测试可以分"四部曲"来完成
先新建一个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工具类(判断一串数字是否连续,连续就分一组,否则另起一组) , 里面有很些方法,比较复杂,那么要测试我们写的方法,,那么如何做呢?
现在我就带大家一起来体验一下
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进行单元测试, 这就有点复杂,希望大家一起进步,共同学习
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。