Android使用JUnit进行单元测试

来源:互联网 发布:天刀捏脸数据导出 编辑:程序博客网 时间:2024/05/20 18:36

前言:为什么要进行单元测试?单元测试能快速是开发者,找到代码中的问题所在,因为是单元测试,所以代码只执行响应的测试单元,执行快解决问题的效率高,同时提高代码的质量。

    Android中的单元测试可简单分为两步:

    1.Manifast中注册:要注册三个部分。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.xhm.testandroid"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <!-- 单元测试的权限 -->    <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />    <!-- 单元测试的工具基类,测试类需要,其中的name和targetPackage是必须的,其他标签可选。targetPackage名要和package名相同,否者会报异常 -->    <instrumentation          android:name="android.test.InstrumentationTestRunner"

android:targetPackage="com.xhm.testandroid" />
<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.xhm.testandroid.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></manifest>

2.测试工具类编写:

package com.xhm.testandroid;import android.test.ActivityInstrumentationTestCase2;/** * 测试工具类编写 其中的MainActivity为要测试的类。 * 当选择Run As---->Android JUnit Test时,就是自动寻找这个类, * 并一次调用测试方法,然后弹出JUnit界面  * @author Administrator *  */public class BaseTest extends ActivityInstrumentationTestCase2<MainActivity> {    // 这个构造方法适用于SDK版本低的。super中参数1:被测试类的包名;super中参数2:被测试类的名字    public BaseTest() {        super("com.xhm.testandroid", MainActivity.class);    }    // 这个构造方法适用于SDK版本高的。    public BaseTest(Class<MainActivity> activityClass) {        super(activityClass);    }    // 测试方法随意取名,但必须为public,测试的时候建立的方法都会调用    public void testNull() {        // 获得MainActivity,这样就能调用其中的方法了        getActivity();    }    public void testTest() {        assertEquals("Helloworld!", getActivity().testjia(1, 3).getText());    }}

3.程序测试截图:

  测试程序截图:

 

  测试结果截图:

 

其中的表示测试成功,即返回的结果和预想的一致。

其中的表示测试失败,即返回的结果和预想的不同。

4.注意:

    1)也许有人会问为什么运行测试的时候会自动去执行BaseTest这个方法,首先是因为他继承了ActivityInstrumentationTestCase2这个类,而在注册instrumentation时就是关键,你可以将Instrumentation理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。

    2)在注册targetPackage时,一定要和项目的package一致,否则会出现问题,然后将测试类建立在targetPackage所指向的包路径下。

    3)在写测试工具类的时候,写了两个构造方法,因为发现在android低版本的SDK中,只有一个参数的构造方法不会调用,所以写了两个。

5.常用方法:

 

AndroidTestCase.getContext()://此函数的功能为得到Android系统的上下文对象,通过它可以取得contentResolver等对象。ActivityInstrumentationTestCase.getActivity()//此函数的功能为得到被测Activity对象assertTrue(String message,boolean condition)//声明状态是TrueassertFalse(String message,boolean condition)//声明状态是FalseassertEquals(String message,T expected,T expected)//声明两个对象相等assertNotNull(String message,Object object)//声明对象不为空assertNull(String message,Object object)//声明对象为空fall(String message)//测试失败并附带一条消息

 

  所有的方法位于:junit.framework.Assert中,地址http://developer.android.com/reference/junit/framework/Assert.html。

 

0 0
原创粉丝点击