zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java -- JDBC 批处理
    Java -- JDBC mysql读写大数据,文本 和 二进制文件
    Python之操作符优先级
    闲聊之Python的数据类型
    UPX和WinUpack压缩壳的使用和脱法
    改进我们的小游戏
    Python while循环语法
    Python条件分支语法
    python条件分支
    小插曲之变量和字符串
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3181961.html
Copyright © 2011-2022 走看看