下面通过一个简单的例子来讲解Instrumentation的基本测试方法。在这个例子中我们会建立一个简单的android应用,同时在其上添加Instrumentation测试程序。
1.首先建立一个android project,其文件结构最终如下:
2、布局文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hustophone.sample" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<!--用于引入测试库-->
<uses-library android:name="android.test.runner" />
<activity android:name=".Sample" 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>
<uses-sdk android:minSdkVersion="3" />
<!--表示被测试的目标包与instrumentation的名称。-->
<instrumentation android:targetPackage="com.hustophone.sample"
android:name="android.test.InstrumentationTestRunner" />
</manifest>
3、被测程序
Sample类
package com.hustophone.sample;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Sample extends Activity {
private TextView myText = null;
private Button button = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myText = (TextView) findViewById(R.id.text1);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
myText.setText("Hello Android");
}
});
}
public int add(int i, int j) {
// TODO Auto-generated method stub
return (i + j);
}
}
这个程序的功能比较简单,点击按钮之后,TextView的内容由Hello变为Hello Android.同时,在这个类中,我还写了一个简单的方法,没有被调用,仅供测试而已。
4、测试类SampleTest
通常可以将测试程序作为另一个android应用程序。但是这里我们为了操作方便,写在了一个应用里面了。
package com.hustophone.sample.test;
import com.hustophone.sample.R;
import com.hustophone.sample.Sample;
import android.content.Intent;
import android.os.SystemClock;
import android.test.InstrumentationTestCase;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
public class SampleTest extends InstrumentationTestCase {
private Sample sample = null;
private Button button = null;
private TextView text = null;
/*
* 初始设置
*
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() {
try {
super.setUp();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent();
intent.setClassName("com.hustophone.sample", Sample.class.getName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sample = (Sample) getInstrumentation().startActivitySync(intent);
text = (TextView) sample.findViewById(R.id.text1);
button = (Button) sample.findViewById(R.id.button1);
}
/*
* 垃圾清理与资源回收
*
* @see android.test.InstrumentationTestCase#tearDown()
*/
@Override
protected void tearDown() {
sample.finish();
try {
super.tearDown();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 活动功能测试
*/
public void testActivity() throws Exception {
Log.v("testActivity", "test the Activity");
SystemClock.sleep(1500);
getInstrumentation().runOnMainSync(new PerformClick(button));
SystemClock.sleep(3000);
assertEquals("Hello Android", text.getText().toString());
}
/*
* 模拟按钮点击的接口
*/
private class PerformClick implements Runnable {
Button btn;
public PerformClick(Button button) {
btn = button;
}
public void run() {
btn.performClick();
}
}
/*
* 测试类中的方法
*/
public void testAdd() throws Exception{
String tag = "testAdd";
Log.v(tag, "test the method");
int test = sample.add(1, 1);
assertEquals(2, test);
}
}
下面来简单讲解一下代码:
setUp()和tearDown()都是受保护的方法,通过继承可以覆写这些方法。
在android Developer中有如下的解释
protected void setUp ()
Since: API Level 3
Sets up the fixture, for example, open a network connection. This method is called before a test is executed.
protected void tearDown ()
Since: API Level 3
Make sure all resources are cleaned up and garbage collected before moving on to the next test. Subclasses that override this method should make sure they call super.tearDown() at the end of the overriding method.
setUp ()用来初始设置,如启动一个Activity,初始化资源等。
tearDown ()则用来垃圾清理与资源回收。
在testActivity()这个测试方法中,我模拟了一个按钮点击事件,然后来判断程序是否按照预期的执行。在这里PerformClick这个方法继承了Runnable接口,通过新的线程来执行模拟事件,之所以这么做,是因为如果直接在UI线程中运行可能会阻滞UI线程。
<uses-library android:name="android.test.runner" />用于引入测试库
<instrumentation android:targetPackage="com.hustophone.sample"
android:name="android.test.InstrumentationTestRunner" />
表示被测试的目标包与instrumentation的名称。
经过以上步骤,下面可以开始测试了。测试方法也有以下几种,下面介绍两个常用的方法:
(1) 用Eclipse集成的JUnit工具
在Eclipse中选择工程Sample,单击右键,在Run as子菜单选项中选择Android JUnit Test
同时可以通过LogCat工具查看信息
(2) 通过模拟器运行单元测试
点击模拟器界面的Dev Tools菜单
再点击Instrumentation选项,进入Instrumentation菜单
这里有一个InstrumentationTestRunner,它是测试的入口,点击这个选项,就可以自动运行我们的测试代码。以下为运行结果:
按钮点击前
按钮点击后
至此,一个简单的测试过程结束了。当然,android的测试内容还有很多,也有比较复杂的,我会在以后的学习过程中继续分享我的体会。好了,今天就到这里吧!
参考资料:
《Android单元测试初探——Instrumentation》
分享到:
相关推荐
学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...
TMTS的核心是基于Android的Instrumentation机制,能够支持发布版本的测试,同时也提供了对内嵌WebView的自动化支持。 在原始设计需求方面,TMTS致力于解决以下问题: 1. **无需专门为自动化测试打包**:TMTS旨在对...
9. **Android Studio中的测试工具**:Android Studio提供了丰富的测试工具,如测试运行器、测试分析器和代码覆盖率视图。我们可以直接在IDE中运行、调试和查看测试结果。 通过以上介绍,我们了解了Android单元测试...
Instrumentation是Google早期提供的Android自动化测试基础工具,它提供了一种低级别的接口来控制和监控应用的行为。虽然可以用来编写测试,但它较为底层,通常需要结合其他框架如JUnit或Robotium来实现更高级别的...
本文将深入探讨“Android自动化测试”这一主题,特别是与`robotium`框架相关的知识,并介绍两个关联的库文件:`android-junit-report-1.5.8.jar`和`android-junit-report-1.2.6.jar`。 首先,让我们了解什么是...
根据提供的文件信息,接下来详细阐述Android自动化测试工具Robotium的基本知识点。 首先,Robotium是一个开源的自动化测试框架,专门用于Android平台的应用程序。它弥补了ActivityInstrumentationTestCase2在集成...
3. **Instrumentation测试**:Android的Instrumentation测试框架允许对应用的完整生命周期进行控制,包括启动、暂停、恢复和销毁等操作,通常用于集成测试。 4. **Mockito与Android Mock**:Mockito是一个流行的...
【Android自动化测试设计与实现】 随着移动设备的快速发展,尤其是Android系统的广泛应用,自动化测试成为了提高产品质量和缩短测试周期的关键技术。Android自动化测试旨在减少手动测试的繁琐和错误,提高测试覆盖...
### Android UI自动化测试的核心概念与实践 #### 一、Android UI自动化测试概述 在移动互联网时代,Android作为全球最大的移动操作系统之一,其应用程序的数量和复杂度也在不断增加。为了确保应用程序的质量,UI...
本文将深入分析Android自动化测试框架及其层次关系,并探讨基于JUnit和instrumentation的Android自动化测试框架实现技术,同时还将涉及集成Hudson进行自动化测试的方法。 首先,Android是一个完全开放的手机平台,...
通过以上这些知识点,我们可以了解到Robotium框架在Android自动化测试中的强大功能以及如何通过搭建测试环境、解析Android UI和利用Robotium-solo API来实现更加深入的自动化测试。掌握这些知识,对于提升Android...
"android-support-multidex-instrumentation.jar.zip" 是一个包含 Android Support Library 多 dex 支持中的 instrumentation 组件的压缩包文件。 首先,我们来理解一下“multidex”。在Android 5.0(API级别21)...
手机自动化测试原理主要涉及到PC控制端、手机终端的agent、通信接口以及自动化测试框架的构建。测试过程中,PC上的控制端通常使用特定的测试工具,如Appium、Selendroid等,通过串口、USB或无线连接(如Wi-Fi、蓝牙...
**CTS技术基础**:CTS测试基于Android Instrumentation框架构建,这是一个用于编写和执行自动化测试的强大工具。更进一步地说,CTS测试是基于JUnit框架编写的单元测试用例集合。这意味着CTS本质上是一系列单元测试...
在Android开发领域,自动化测试是不可或缺的一环,尤其在Java环境下进行敏捷开发时,测试驱动开发(TDD)显得尤为重要。本文主要概述了Android平台下的几种自动化测试手段,旨在提供一个全面的比较,而不是深入探讨每...
### Appium自动化测试工具知识点详解 #### 一、Appium简介及原理 ##### 1.1 Appium简介 - **定义**: Appium是一款强大的开源自动化测试工具,支持iOS和Android两大移动操作系统,能够进行跨平台的测试工作。适用...
Android UIAutomator自动化测试是一种强大的工具,用于在Android平台上进行UI层面的自动化测试。它主要适用于Android 4.1及更高版本,但不支持Hybrid App和WebApp的测试。UIAutomator是基于Java的,这使得测试代码...
在开始介绍Appium之前,我们先简要了解一下Android和iOS平台官方提供的自动化测试工具。 **Android平台官方自动化测试工具:** - **单元测试**:AndroidJUnitRunner,这是一种基于JUnit的单元测试框架。 - **稳定...
本压缩包“行业分类-设备装置-基于android平台的自动化测试方法及测试工具.zip”提供了关于如何在Android平台上进行自动化测试的方法和工具的详细资料,特别是针对设备装置的测试。 首先,我们来了解一下自动化测试...