Android提供了上面的多个测试类,可以允许我们对于单个方法、Activity、Service、Application等多个对象进行测试,单元测试可以很方便的让我们对代码进行测试,并且方便对重构后的代码进行检查。本篇将简要的讲解如何对Android中的对象进行测试。
一、准备工作
二、测试与Android运行环境无关的方法
2.1 InstrumentationTestCase
当你要测试与Android环境无关的方法时,推荐继承InstrumentationTestCase来进行测试。比如下面的比大小的方法就很适合做这样的测试。
public static int getMax(int a, int b) { return a >= b ? a : b; }
得到版本号的代码因为涉及到了Context所以和android运行的环境有关,我们必须要传入一个上下文(context)对象,这时继承InstrumentationTestCase就没有办法进行测试了。
/** 取得当前应用的版本号 * @param context * @return */ public static String getVersionName(Context context) { try { PackageInfo manager = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); return manager.versionName; } catch (NameNotFoundException e) { return "Unknown"; } }
那么是不是用它就不能对activity这样的东西进行测试了呢?也不是,我们仍旧可以用它来测试Activity,前题是要通过代码初始化对象,但因为它的子类可以针对Activity进行完善的测试,所以我们一般不用它来做测试activity的工作。第二节中,先给出了一个简单的demo,然后给出用它测试activity的demo。
2.2 举例
测试的目标类——MyUtils:
package com.kale.androidtest; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; public class MyUtils { public static int getMax(int a, int b) { return a >= b ? a : b; } }
测试类——MySimpleTest:
package com.kale.androidtest.test; import com.kale.androidtest.MyUtils; import android.test.InstrumentationTestCase; public class MySimpleTest extends InstrumentationTestCase { public void testGetMax(){ int max = MyUtils.getMax(1, 3); assertEquals(3, max); } }
附:测试Activity
activity的代码就不贴了,里面有个editText,这里的测试也是简单的例子,表示它可以用来测试activity,例子没有任何实际意义。
package com.kale.androidtest.test; import android.content.Intent; import android.os.SystemClock; import android.test.InstrumentationTestCase; import android.widget.EditText; import com.kale.androidtest.MyActivity; /** * @author:Jack Tony * @description : * @web: http://www.oschina.net/question/54100_27061 * @date :2015年2月19日 */ public class MySampleTest2 extends InstrumentationTestCase { MyActivity mActivity; EditText mEditText; @Override protected void setUp() throws Exception { // 用intent启动一个activity Intent intent = new Intent(); intent.setClassName("com.kale.androidtest", MyActivity.class.getName()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mActivity = (MyActivity) getInstrumentation().startActivitySync(intent); } /** * @description 测试是否初始化完成 * */ public void testInit() { mEditText = mActivity.getEditText(); assertNotNull(mActivity); assertNotNull(mEditText); } /** * @description 测试得到activity中editText中的文字 * */ public void testGetText() { mEditText = mActivity.getEditText(); String text = mEditText.getText().toString(); assertEquals("", text); } /** * @description 测试设置文字的方法 * */ public void testSetText() { mEditText = mActivity.getEditText(); // 在主线程中设置文字 getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { mEditText.setText("kale"); } }); // 暂停1500ms SystemClock.sleep(1000); assertEquals("kale", mEditText.getText().toString()); } /** * 垃圾清理与资源回收 * * @see android.test.InstrumentationTestCase#tearDown() */ @Override protected void tearDown() { mActivity.finish(); try { super.tearDown(); } catch (Exception e) { e.printStackTrace(); } } }
三、测试Application
原文:http://www.cnblogs.com/tianzhijiexian/p/4296055.html