博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
阅读量:6306 次
发布时间:2019-06-22

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

原文地址:

功能性测试包括模拟用户操作之类的组件验证。例如开发者可以通过功能性测试来验证在用户执行了UI操作之后Activity是否启动了Activity。

如要为Activity创建功能性测试,测试类应当继承。与ActivityUnitTestCase不同,既可以与Android系统通信,又能使程序可以接收键盘输入事件与屏幕点击事件。

验证功能行为

一般功能性测试可能会有以下测试目的:

  • 验证在某个UI控制器被按下后,目标Activity是否被启动。
  • 验证目标Activity是否将在启动之前的用户输入数据正确显示。

开发者所实现的代码可能如下:

@MediumTestpublic void testSendMessageToReceiverActivity() {    final Button sendToReceiverButton = (Button)             mSenderActivity.findViewById(R.id.send_message_button);    final EditText senderMessageEditText = (EditText)             mSenderActivity.findViewById(R.id.message_input_edit_text);    // Set up an ActivityMonitor    ...    // Send string input value    ...    // Validate that ReceiverActivity is started    ...    // Validate that ReceiverActivity has the correct data    ...    // Remove the ActivityMonitor    ...}

测试框架会等待ReceiverActivity启动,否则的话将会在超时后返回null。如果ReceiverActivity启动,那么则会收到一个命中。开发者可以通过断言方法来验证ReceiverActivity是否被启动,命中数是否会如所期望的那样有所增长。

设置ActivityMonitor

如果需要监视Activity,可以注册。当目标Activity启动时,系统会通知一个事件。如果目标Activity启动,那么ActivityMonitor的计数器则会更新。

一般使用应当执行以下步骤:

  • 1.通过getInstrumentation()方法获得用于测试的Instrumentation实例。
  • 2.通过Instrumentation的addMonitor()重载方法将Instrumentation.ActivityMonitor的实例添加到当前的instrumentation中,具体的匹配规则可由IntentFilter或者类名指定。
  • 3.等待被监视的Activity启动。
  • 4.验证监视器的数字增长。
  • 5.移除监视器。

例如:

// Set up an ActivityMonitorActivityMonitor receiverActivityMonitor =        getInstrumentation().addMonitor(ReceiverActivity.class.getName(),        null, false);// Validate that ReceiverActivity is startedTouchUtils.clickView(this, sendToReceiverButton);ReceiverActivity receiverActivity = (ReceiverActivity)         receiverActivityMonitor.waitForActivityWithTimeout(TIMEOUT_IN_MS);assertNotNull("ReceiverActivity is null", receiverActivity);assertEquals("Monitor for ReceiverActivity has not been called",        1, receiverActivityMonitor.getHits());assertEquals("Activity is of wrong type",        ReceiverActivity.class, receiverActivity.getClass());// Remove the ActivityMonitorgetInstrumentation().removeMonitor(receiverActivityMonitor);

使用Instrumentation发送键盘事件

如果Activity含有EditText,可能需要测试用户是否可以对其输入数据。

一般来说,要发送字符串到EditText,应当:

  • 1.在方法中运行同步方法,这样会使UI线程一直等待接收焦点。
  • 2.调用方法使主线程变为空闲状态。
  • 3.通过方法发送一条字符串给EditText。

例如:

// Send string input valuegetInstrumentation().runOnMainSync(new Runnable() {    @Override    public void run() {        senderMessageEditText.requestFocus();    }});getInstrumentation().waitForIdleSync();getInstrumentation().sendStringSync("Hello Android!");getInstrumentation().waitForIdleSync();

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

你可能感兴趣的文章
走红日本 阿里云如何能够赢得海外荣耀
查看>>
在市场营销中使用敏捷方法:过程、团队与成功案例
查看>>
新书问答:Agile Management
查看>>
苹果将iOS应用带入macOS
查看>>
react入门
查看>>
VUE高仿饿了么app
查看>>
针对Kubernetes软件栈有状态服务设计的思考
查看>>
你的可用性达标了吗?云端业务性能高可用的深度实践
查看>>
linux yum清缓存脚本
查看>>
基于epoll封装的事件回调miniserver
查看>>
天猫高管全面解读大快消2018新零售打法
查看>>
idea springboot热部署无效问题
查看>>
第八章 进程间通信
查看>>
HttpSession接口中的方法(Jsp中的session类的用法)
查看>>
「镁客早报」AI可预测心脏病人死亡时间;机器人开始在美国送外卖
查看>>
MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
查看>>
物联网全面升级,十年内推动工业进入智能化新阶段
查看>>
spring-通过ListFactory注入List
查看>>
一种基于SDR实现的被动GSM嗅探
查看>>
阿里云ECS每天一件事D1:配置SSH
查看>>