基本Activity 测试用例

创建一个测试用例

在对应要测试Activity的package路径下新建test包,

项目工程结构.png

在改test路径下新建一个FirstActivityTest类(类名+Test后缀)继承ActivityTestCase

public class FirstActivityTest extends ActivityInstrumentationTestCase2 {

private FirstActivity mFirstActivity;

private TextView mFirstTestTextView;

public FirstActivityTest() {

super(FirstActivity.class);

}

}

构造函数是由测试用的Runner调用,用于初始化测试类的。

测试会在运行任何其它测试方法之前自动执行setUp(Runner调用)方法,可以对一些对象进行赋值

@Override

protected void setUp() throws Exception {

super.setUp();

mFirstActivity = getActivity();

mFirstTestTextView = (TextView) mFirstActivity.findViewById(R.id.first_test_textview);

}

增加一个测试前提检查想要测试的对象是否已经正确地初始化

public void testPreconditions() {

assertNotNull("mFirstTestActivity is null", mFirstActivity);

assertNotNull("mFirstTestText is null", mFirstTestTextView);

}

测试方法测试默认文本是否和 strings.xml 资源中定义的文本一样。

public void testFirstTestTextView_labelText() {

final String expected = mFirstActivity.getString(R.string.hello_world);

final String actual = mFirstTestTextView.getText().toString();

assertEquals("mFirstTestText contains wrong text", expected, actual);

}

manifest.xml中注册测试用例

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.speed.androidtest.FirstActivity"

android:label="@string/app_name" >

android:name="android.test.InstrumentationTestRunner"

android:label="Tests for com.speed.androidtest"

android:targetPackage="com.speed.androidtest" />

运行测试用例

项目工程右键Run as ==>Android JUint Test,安装完成后会自动执行测试用例,testFirstTestTextView_labelText执行判断

test_success.png

修改main_activity.xml中的

android:id="@+id/first_test_textview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="hello" />

执行结果

test_error.png

检测到textview中的文本和资源中定义的不一致

UI组件测试, Button 点击

setUp函数编写

@Override

protected void setUp() throws Exception {

super.setUp();

setActivityInitialTouchMode(true);

mSecondTestUIActivity = getActivity();

mClickMeButton = (Button) mSecondTestUIActivity.findViewById(R.id.second_test_ui_btn);

}

把touch mode设置为真可以防止在执行编写的测试方法时,人为的UI操作获取到控件的焦点(比如,一个按钮会触发它的点击监听器)。确保在调用getActivity()之前调用setActivityInitialTouchMode(true);

测试布局

@MediumTest

public void testClickMeButton_layout() {

//获取Activity的最顶层布局

View decorView = mSecondTestUIActivity.getWindow().getDecorView();

//检测按钮控件是否在屏幕上

ViewAsserts.assertOnScreen(decorView, mClickMeButton);

ViewGroup.LayoutParams layoutParams = mClickMeButton.getLayoutParams();

assertNotNull(layoutParams);

//检测按钮宽度是否为WRAP_CONTENT

assertEquals(layoutParams.width, WindowManager.LayoutParams.WRAP_CONTENT);

//检测按钮高度是否为WRAP_CONTENT

assertEquals(layoutParams.height, WindowManager.LayoutParams.WRAP_CONTENT);

}

测试点击效果

@MediumTest

public void testClickMeButton_click() {

TouchUtils.clickView(this, mClickMeButton);

}

测试注解

@SmallTest

标志该测试方法是小型测试的一部分。

@MediumTest

标志该测试方法是中等测试的一部分。

@LargeTest

标志该测试方法是大型测试的一部分。

通常情况下,如果测试方法只需要几毫秒的时间,那么它应该被标记为@SmallTest,长时间运行的测试(100毫秒或更多)通常被标记为@MediumTest或@LargeTest,这主要取决于测试访问资源在网络上或在本地系统。

创建单元测试

Android 单元测试

测试类应该继承自ActivityUnitTestCase。继承ActivityUnitTestCase的Activity不会被Android自动启动。要单独启动Activity,我们需要显式的调用startActivity()方法,并传递一个Intent来启动我们的目标Activity。

public class LaunchActivityTest extends ActivityUnitTestCase {

private Intent mLaunchIntent;

public LaunchActivityTest() {

super(LaunchActivity.class);

}

@Override

protected void setUp() throws Exception {

super.setUp();

mLaunchIntent = new Intent(getInstrumentation().getTargetContext(),

LaunchActivity.class);

}

@MediumTest

public void testPreconditions() {

startActivity(mLaunchIntent, null, null);

final Button launchNextButton = (Button) getActivity().findViewById(R.id.launch_next_activity_button);

assertNotNull("mLaunchActivity is null", getActivity());

assertNotNull("mLaunchNextButton is null", launchNextButton);

}

启动一个Activity

Button被按下时,启动的LaunchActivity是否正确。

验证启动的Intent是否包含有效的数据。

为了验证一个触发Intent的Button的事件,我们可以使用getStartedActivityIntent()方法。通过使用断言方法,我们可以验证返回的Intent是否为空,以及是否包含了预期的数据来启动下一个Activity。如果两个断言值都是真,那么我们就成功地验证了Activity发送的Intent是正确的了。

@MediumTest

public void testNextActivityWasLaunchedWithIntent() {

startActivity(mLaunchIntent, null, null);

final Button launchNextButton = (Button) getActivity().findViewById(R.id.launch_next_activity_button);

launchNextButton.performClick();

final Intent launchIntent = getStartedActivityIntent();

assertNotNull("Intent was null", launchIntent);

assertTrue(isFinishCalled());

final String payload = launchIntent.getStringExtra(NextActivity.EXTRAS_PAYLOAD_KEY);

assertEquals("Payload is empty", LaunchActivity.STRING_PAYLOAD

, payload);

}

功能测试

要为Activity创建功能测,我们的测试类应该对ActivityInstrumentationTestCase2进行扩展。与ActivityUnitTestCase不同,ActivityInstrumentationTestCase2中的测试可以与Android系统通信,发送键盘输入及点击事件到UI中。

要了解一个完整的测试例子可以参考示例应用中的SenderActivityTest.java。

添加测试方法验证函数的行为

我们的函数测试目标应该包括:

验证UI控制是否正确启动了目标Activity。

验证目标Activity的表现是否按照发送Activity提供的数据呈现。

我们可以这样实现测试方法:

@MediumTest

public 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

...

}

测试会等待匹配的Activity启动,如果超时则会返回null。如果ReceiverActivity启动了,那么先前配置的ActivityMoniter就会收到一次碰撞(Hit)。我们可以使用断言方法验证ReceiverActivity是否的确启动了,以及ActivityMoniter记录的碰撞次数是否按照预想地那样增加。

设立一个ActivityMonitor

为了在应用中监视单个Activity我们可以注册一个ActivityMoniter。每当一个符合要求的Activity启动时,系统会通知ActivityMoniter,进而更新碰撞数目。

通常来说要使用ActivityMoniter,我们可以这样:

使用getInstrumentation()方法为测试用例实现Instrumentation。

使用Instrumentation的一种addMonitor()方法为当前instrumentation添加一个Instrumentation.ActivityMonitor实例。匹配规则可以通过IntentFilter或者类名字符串。

等待开启一个Activity。

验证监视器撞击次数的增加。

移除监视器。

下面是一个例子:

// Set up an ActivityMonitor

ActivityMonitor receiverActivityMonitor =

getInstrumentation().addMonitor(ReceiverActivity.class.getName(),

null, false);

// Validate that ReceiverActivity is started

TouchUtils.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 ActivityMonitor

getInstrumentation().removeMonitor(receiverActivityMonitor);

使用Instrumentation发送一个键盘输入

如果Activity有一个EditText,我们可以测试用户是否可以给EditText对象输入数值。

通常在ActivityInstrumentationTestCase2中给EditText对象发送串字符,我们可以这样做:

使用runOnMainSync()方法在一个循环中同步地调用requestFocus()。这样,我们的UI线程就会在获得焦点前一直被阻塞。

调用waitForIdleSync()方法等待主线程空闲(也就是说,没有更多事件需要处理)。

调用sendStringSync()方法给EditText对象发送一个我们输入的字符串。

比如:

// Send string input value

getInstrumentation().runOnMainSync(new Runnable() {

@Override

public void run() {

senderMessageEditText.requestFocus();

}

});

getInstrumentation().waitForIdleSync();

getInstrumentation().sendStringSync("Hello Android!");

getInstrumentation().waitForIdleSync();

Demo地址

android整机测试用例,Android_TestCase(测试用例)相关推荐

  1. 测试用例(测试用例的编写、评审和管理)

    文章目录 测试用例介绍 需求分析与测试点编写 测试用例编写方法 用例编写 测试用例评审 测试用例管理 测试点划分的常用术语 兼容性:在不同平台上的表现 易用性:用户使用是否友好 UI元素:界面布局 测 ...

  2. Android整机性能监控:多核CPU相关数据的获取(使用率、主频)

    根据最近的调研,Android整机的性能主要有如下方面: 1.CPU 2.内存 3.耗电量 4.网络 本文着重介绍CPU相关数据的获取,在多核情况下,对每个CPU运行情况进行监控,获取相关的属性. A ...

  3. 软件测试 通用技术03 测试用例 黑盒测试用例设计方法 等价类划分法 边界值分析法 判定表法 场景法 功能图法 其他用例设计方法 用例设计方法综合选择

    文章目录 1 测试用例 1.1 测试用例的定义 1.2 测试用例模板 1.3 测试用例模板的内容 测试用例编号 测试项 依赖用例 测试步骤 测试数据 预期结果 测试结果 测试人 备注 2 测试用例编写 ...

  4. 如何编写测试用例与测试用例的评审

    如何编写测试用例与测试用例的评审 测试用例的简介 测试用例(TestCase)是为项目需求而编制的一组测试输入.执行条件以及预期结果,以便测试某个程序是否满足客户需求 可以总结为:每一个测试点的数据设 ...

  5. java 单元测试 异步_Java/Android编写异步的单元测试用例

    不写单元测试用例的程序员不是一个好CTO!!! 注:以下内容编码环境为AndroidStudio_2.4Preview6,测试框架 JUnit4.12 今天在研究 MVP_RxJava2_Retrof ...

  6. 场景法设计测试用例atm_测试用例设计经典面试题之电梯、杯子、笔、桌子、洗衣机、椅子、ATM等...

    测试用例设计经典面试题之电梯.杯子.笔.桌子.洗衣机.椅子.ATM等 <转载> 1.测试项目:电梯 需求测试:查看电梯使用说明书.安全说明书等 界面测试:查看电梯外观 功能测试:测试电梯能 ...

  7. 测试电梯的测试用例_测试用例设计经典面试题

    测试用例设计经典面试题之电梯.杯子.笔.桌子.洗衣机.椅子.ATM等按测试的类型逐一测试测试类型主要分为:界面测试.性能测试(压力测试).安全测试.兼容性测试几个方向. 1.测试项目:电梯 需求测试: ...

  8. 测试用例-写测试用例时怎么入手

    刚开始工作的朋友,会和我一样有不少的困惑!用例该怎么写?重点在哪?项目急来不及写用例怎么办?下面分享自己的思路,欢迎探讨.. 问:拿到技术文档该如何下手,如何建立测试用例树. 通读文档,明确产品的核心 ...

  9. 【1】测试用例设计-测试用例概述

    测试用例概述

最新文章

  1. 七号信令:SCCP层简介
  2. python综合案例分享_Python面向对象 三大特性 综合案例+1(视频里的作业)
  3. Sublime P4语法高亮设置
  4. 【NodeJS】运行在服务端的JavaScript
  5. php禁止某个链接,php – 使用htaccess忽略链接的某些部分
  6. 积累一点小Sql 表的纵横互转玩玩看
  7. POI 2003/2007 下拉列表
  8. 计算图片的宽和高 动态设置图片的位置
  9. Java 接口和抽象类可以被new么?——顺便总结内部类
  10. jquery 判断控件css样式,jQuery获取并设置CSS类
  11. r语言 xmlto html,使用R语言将XML转换为CSV(示例代码)
  12. img解包打包工具_Python开发GUI实战:图片转换素描画工具!
  13. AI 秒杀人类!OpenAI 击败 DOTA2 世界冠军 OG
  14. sqoop各类命令示范
  15. risc-v 编译 linux,linux - 如何为RISC-V编译Linux Kernel 4.20 - 堆栈内存溢出
  16. 十分钟开发一个调用Activity的PhoneGap插件
  17. Nginx惊群问题分析及解决
  18. Windows Embedded CE 中断结构分析
  19. 机器人应用(Skill)精选丨让HEXA机器人成为直播网红,还可以接收红外信号
  20. 2020四川大学计算机考研真题,2020年四川大学计算机考研初试874真题回忆!

热门文章

  1. iTranslate for Mac(苹果专用翻译软件)
  2. 古典密码算法实验c语言,古典密码实验报告.doc
  3. 牛客网华为机试【表示数字】
  4. Win7系统每次打开ie浏览器都要重新登录的原因及解决方法图文教程
  5. VS编译时常见报错处理
  6. 如何在不使用第三个变量的条件下交换两个数
  7. 远程211统考英语和计算机难不难,网络教育统考难不难
  8. 求车载rkpx3刷机包!!!和语音助手app!或者怎么重新设置UI
  9. 《小狗钱钱》博多·舍费尔 读书笔记
  10. 多线程在线检测网速流量HTML源码