Android使用JUnit进行单元测试

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

    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)//声明状态是True
assertFalse(String message,boolean condition)//声明状态是False
assertEquals(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

原文地址:https://www.cnblogs.com/qinghuaideren/p/3181961.html