一. 被test的工程:
新建一个android工程:D_session;它有一个activity:D_sessionActivity;package名:com.mysession
二.测试工程:
新建一个测试工程:D_sessionTest, 类型是android test project;
1. menifest文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mysession.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.mysession" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
</manifest>
2. 一个base activity 来定义各种模拟测试者的动作和判断测试结果,各个测试类都继承该类:
package com.mysession.test;
import android.app.Activity;
import android.app.Instrumentation;
import android.app.Instrumentation.ActivityMonitor;
import android.content.Intent;
import android.test.InstrumentationTestCase;
import android.test.TouchUtils;
import android.widget.Button;
import android.widget.TextView;
import com.mysession.D_sessionActivity;
public class SessionActivityTest extends InstrumentationTestCase {
private Instrumentation mInstrumentation;
private ActivityMonitor mSessionMonitor;
private Activity mCurrentActivity, mSessionActivity;
private String TextNotEqual = "text not equal.";
private static final String PackageName = "com.mysession";
@Override
protected void setUp() throws Exception {
// 初始化
super.setUp();
if (mInstrumentation == null) {
mInstrumentation = getInstrumentation();
}
mSessionActivity = null;
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
//释放资源
closeActivity(mSessionActivity);
mCurrentActivity = null;
}
private void closeActivity(Activity activity) {
if(activity != null){
activity.finish();
activity = null;
}
}
public void openSessionActivity() {
// 打开session activity
try {
setUp();
} catch (Exception e) {
e.printStackTrace();
}
mSessionMonitor = mInstrumentation.addMonitor(
D_sessionActivity.class.getName(), null, false);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(PackageName, D_sessionActivity.class.getName());
mInstrumentation.startActivitySync(intent);
mSessionActivity = getInstrumentation().waitForMonitor(mSessionMonitor);
assertNotNull(mSessionActivity);
mCurrentActivity = mSessionActivity;
}
//判断text是否正确
public void assertTextEqual(int resId, String strText) {
TextView textView = (TextView) mCurrentActivity.findViewById(resId);
assertNotNull(textView);
assertEquals(TextNotEqual,
strText,
textView.getText().toString());
};
// 模拟按钮点击事件
public void clickButton(int resId){
Button button = (Button) mCurrentActivity.findViewById(resId);
assertNotNull(button);
TouchUtils.clickView(this, button);
}
}
3. 各个测试类:
测试类一:
package com.mysession.test.cases;
import com.mysession.R;
import com.mysession.test.SessionActivityTest;
public class MyCase1 extends SessionActivityTest {
public void testCase1() {
openSessionActivity();
assertTextEqual(R.id.etUrl,
"http://172.20.230.5/iportal/samples/jsapi/mobile.
html");
}
public void testCase3() {
openSessionActivity();
clickButton(R.id.btnLoad);
clickButton(R.id.btnHistory);
}
}
测试类二:
package com.mysession.test.cases;
import com.mysession.R;
import com.mysession.test.SessionActivityTest;
public class MyCase2 extends SessionActivityTest{
public void testCase2() {
openSessionActivity();
clickButton(R.id.btnLoad);
}
}
三. 有些动作(如点击menu)需要通过包robotium-solo-1.8.0.jar来完成。
所以要在Build Path->Configure Build Path…中导入:robotium-solo-1.8.0.jar
程序中:
private Solo solo;
solo = new Solo(getInstrumentation(),getActivity);
就可以使用solo了, 如:
solo.clickOnMenuItem(text);
solo.goBack();
摘自fhy_2008的专栏
- Android JUnit 入门指南
自动化单元测试可以做许多的事,并帮你节省时间.它也可以被用作快速检验新建工程或进行冒烟测试.始终,单元测试是作为一种有效的.系统的检验应用程序各功能执行的方式.Android SDK支持JUnit的自 ...
- Android Junit测试框架
对应用进行单元测试: 使用Junit测试框架,是正规Android开发的必用技术.在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 1.配置指令集和函数库: (1)配置指令集,指定 ...
- 在Android Studio进行“简单配置”单元测试(Android Junit)
起因 在Android studio 刚出.本人就想弄单元测试,可惜当时Android studio不知道抽什么风(准确来说,应该是我不会弄而已).无法执行到相应的代码.后来今天突然自己又抽风.又想去 ...
- Android JUnit Test——批量运行测试代码
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Android测试三要素 写Android测试用例有三要素,一是我们用的“安卓模拟器device” ...
- 1.Android JUnit Runner(使用AndroidStudio)
一.Android JUnit Runner介绍 1.Android JUnit Runner 1)是一个测试运行器,用于运行Junit3和Junit4的Android测试包 2)替换Instrume ...
- [转]Android Studio 里搭建自动化测试框架Robotium
Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...
- Android JUnit test
Android单元测试步骤 1.修改AndroidManifest.xml文件. 添加instrumentation节点.其中name是固定值,targetPackage为需要测试的类所在的包.如: ...
- Android -- junit测试框架,logcat获取log信息
1. 相关概念 白盒测试: 知道程序源代码. 根据测试的粒度分为不同的类型 方法测试 function test 单元测试 unit test 集成 ...
- 如何在Android手机上进行自动化测试(上)
版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 前言 通过阅读本节教程,你将了解到以下内容: 如何在脚本代码中.运行脚本时指定手机 如何填写--device Android:/// ...
随机推荐
- python标准库学习-SimpleHTTPServer
这是一个专题 记录学习python标准库的笔记及心得 简单http服务 SimpleHTTPServer 使用 python -m SimpleHTTPServer 默认启动8000端口 源码: &q ...
- mysql查询结果乱码
1.查询数据库结果乱码 mysql,; +-----------+-------------------------------------------------------------+ | do ...
- 谷歌SEO老域名注册完全攻略
老域名有优势,不管在百度和谷歌都是一样的. 我们查看搜索结果就能发现,谷歌里面很多排前十的网站都是N年前的,一零年以后的算是比较新的,很多产品网站域名是零几年,甚至很多排名更好的域名是九几年的. 谷歌 ...
- Device Drivers Should Not Do Power Management
有人对现有的电源管理提出了意见,认为驱动程序不应该做电源管理,paper地址在这里: http://www.ruf.rice.edu/~mobile/publications/xu2014apsys. ...
- 避免Gson使用时将一些字符自动转换为Unicode转义字符
// 避免Gson使用时将一些字符自动转换为Unicode转义字符 public static Gson gson = new GsonBuilder().disableHtmlEscaping(). ...
- Node负载能力测试
需求很简单,就是提供一个服务接口收集端上传来的日志文件并保存,要求能承受的QPS为5000. 以前从来都没考虑过Node服务的负载能力,用 koa + co-busboy 接受上传文件请求并用 fs ...
- LeetCode OJ:Pow(x, n) (幂运算)
Implement pow(x, n). 幂运算,简单的方法snag然很好实现,直接循环相乘就可以了,但是这里应该不是那种那么简单,我的做法使用到了一点递归: class Solution { pub ...
- react style: 二级菜单
1.样式 @import "../../styles/varibles"; .app-sidebar { overflow: hidden; width: 180px; > ...
- node 一站式 学习 教程
还是比较全面的, 包括了 : monogoDB的安装 使用 , 各种插件, 中间件的介绍, 路由的介绍, 各种数据库框架的介绍, 测试介绍; 掌握后应该可以开发一个中型的程序, 大型程序因为有性能的 ...
- js控制iframe的刷新(页面局部刷新)
今天遇到个问题,后台会员审核之后,页面内的会员审核状态要及时改变,但又不能指望用户手动刷新(用户体验很不好) 如果审核页面和显示审核状态时同在一个html页面的话,那么直接用js改变div内部的文本就 ...