博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity Test1
阅读量:6088 次
发布时间:2019-06-20

本文共 3749 字,大约阅读时间需要 12 分钟。

源代码下载(免积分) 

Acitivty測试的API的父类是InstrumentationTestCase。这个类可以获取Instrumentation。来操作Activity。


对于activity測试,InstrumentationTestCase提供了以下三个功能:
  1. 生命周期的控制:使用Instrumentation,您能控制activity的生命周期

  2. Dependency injection:使用Instrumentation,你可以创建mock的系统对象。能帮助你控制測试环境

  3. UI交互:使用Instrumentation可以发送按键或者触屏事件

InstrumentationTestCase測试Activity的基本的子类:

  1. ActivityInstrumentationTestCase2 :这个类用于一个或者多个activity的功能測试

  2. ActivityUnitTestCase:用于測试隔离的单个activity

  3. SingleLaunchActivityTestCase:这个类用于測试单个activity。比較少用。

其它和Activity相关的类

        Mock 相关的类,ViewAsserts等。

 
  • ActivityInstrumentationTestCase2类的測试activity的功能

                功能:在SendActivity中定义Button用于启动ReceiveActivity。并把EditText中的数据传递给ReceiveActivity

                注意:假设使用的是真机时,首先要把锁屏解开。其次要把键盘调成英文输入。不然的话死的非常慘的,^_^

 
1. 继承ActivityInstrumentationTestCase2
public class SendeActivityFunTest extends
ActivityInstrumentationTestCase2
2.添加构造方法,这是junit要求的。
/*为了測试的应用可以正确的实例化,必须设置这个构造函数     * test runner(InstrumentationTestRunner或者其子类)会调用构造函数去实例化測试类。     */    public SendeActivityFunTest() {
/*android可以利用SendActivity.class和AndroidManifest.xml *中的instrumentation标签中的android:targetPackage属性可以获取要測试的类。 */ super(SendActivity.class); // TODO Auto-generated constructor stub }
3. 添加setUp方法
//setUp()方法在其它測试方法之前调用,主要是用于初始化变量和清楚曾经的測试。

protected void setUp() throws Exception {
// TODO Auto-generated method stub super.setUp(); //保存系统对象的引用 mSendActivity = getActivity(); sendButton = (Button) mSendActivity.findViewById(R.id.sendButton); mEditText = (EditText) mSendActivity.findViewById(R.id.editText); }
4. 加入測试是否正确初始化的方法
//验证初始化是否正确    public void testPreconditions()    {
assertNotNull(mSendActivity); assertNotNull(sendButton); assertNotNull(mEditText); }
5. 測试是否可以正确的启动ReceiveActivity。并获取正确的数据

//測试是否可以引导ReceiveActivity。并传递的数据正确    public void testSendMessageToReceiverActivity()    {
//创建ActivityMonitor去监听系统和ReceiverActivity的通信 Instrumentation.ActivityMonitor activityMonitor = getInstrumentation() .addMonitor(ReceiveActivity.class.getName(), null, false); /*在UI线程的測试要注意: * 创建一个Runnable的匿名内部类,并作为參数传递给runOnUiThread() * */ getInstrumentation().runOnMainSync(new Runnable() {
@Override public void run() {
// TODO Auto-generated method stub //请求获取焦点 mEditText.requestFocus(); } }); //等待直到MainHandler中的事件都有被运行完 getInstrumentation().waitForIdleSync(); //发送字符串到EditText中 getInstrumentation().sendStringSync(message); getInstrumentation().waitForIdleSync(); /*TouchUtils:有非常多触摸事件,这些方法可以用在InstrumentationTestCase *和ActivityInstrumentationTestCase2上去模拟用户触摸屏幕。 */ TouchUtils.clickView(this, sendButton); //Block until an Activity is created that matches this monitor ReceiveActivity receiveActivity = (ReceiveActivity) activityMonitor .waitForActivityWithTimeout(TIME_OUT); assertNotNull("ReceiverActivity is null", receiveActivity); assertEquals("monitor for ReceiverActivity has not been called", 1,activityMonitor.getHits()); final TextView receivedMessage = (TextView) receiveActivity .findViewById(R.id.textView); assertNotNull(receivedMessage); assertEquals("wrong received message ", message, receivedMessage.getText().toString()); //移除activityMonitor getInstrumentation().removeMonitor(activityMonitor); }

使用ActivityInstrumentationTestCase2通常的測试步骤是:

  1. 初始化的測试(此时setup方法中的变量)
  2. UI測试
  3. activity的状态管理的測试(主要用于測试生命周期)

參考的资料:

      

      

      

转载地址:http://fgpwa.baihongyu.com/

你可能感兴趣的文章
svn+apache 安装和使用 并与Nginx 整合
查看>>
简易javascript遮罩层提示框
查看>>
华为防火墙USG6330 NAT 配置
查看>>
MYSQL性能调优与架构设计学习笔记 - 基础篇 MYSQL基本介绍
查看>>
围炉夜话
查看>>
NVL,NVL2,NULLIF,COALESCE
查看>>
.gitignore使用规则
查看>>
ubuntu 下完美解决 mysql 乱码的问题
查看>>
分析Windows和Linux动态库
查看>>
apache和nginx的性能分析
查看>>
php-fpm常用配置
查看>>
羊皮卷的故事
查看>>
基于jQuery select下拉框美化插件
查看>>
权限 Ralasafe 思考
查看>>
cpomoser 出现 killed 报错误问题
查看>>
正则表达式详细用法及讲解
查看>>
HIVEjdbc搭建
查看>>
DCon 2015 中国大数据技术嘉年华圆满结束
查看>>
CRC16 CRC-CCITT (0xFFFF) 升级版
查看>>
twemproxy源码解析---特性及启动流程
查看>>