3、Android构建仪表测试

不同于运行于JVM的本地单元测试,仪表测试运行于你的物理设备或虚拟机中。当你需要访问设备的信息(比如Context)或者使用真正的Android framework组件时(比如SharePreferences)时,你需要创建仪表测试。使用仪表测试同样可以帮助你减少mock代码。如果你需要,同样可以使用虚拟框架。

搭建测试环境

第一篇已经阐述

创建仪表测试类

你的仪表测试类风格类似Junit 4 测试类。
创建一个仪表测试类,需要在类定义前面添加 @RunWith(AndroidJUnit4.class) 注解。你也同样需要声明Android Testing Support Library中的AndroidJUnitRunner类为默认的test runner。第一篇已经阐述。
代码示例:

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.util.Pair;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class LogHistoryAndroidUnitTest {

    public static final String TEST_STRING = "This is a string";
    public static final long TEST_LONG = 12345678L;
    private LogHistory mLogHistory;

    @Before
    public void createLogHistory() {
        mLogHistory = new LogHistory();
    }

    @Test
    public void logHistory_ParcelableWriteRead() {
        // 设置 Parcelable 对象用于发送和接收
        mLogHistory.addEntry(TEST_STRING, TEST_LONG);

        // 写入数据
        Parcel parcel = Parcel.obtain();
        mLogHistory.writeToParcel(parcel, mLogHistory.describeContents());

        // 重置
        parcel.setDataPosition(0);

        //读取数据
        LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
        List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData();

        // 断言验证结果是否正确
        assertThat(createdFromParcelData.size(), is(1));
        assertThat(createdFromParcelData.get(0).first, is(TEST_STRING));
        assertThat(createdFromParcelData.get(0).second, is(TEST_LONG));
    }
}

创建test suite

为了组织执行你的仪表测试,你可以将想要执行的测试类集中到一个test suite中,同时运行这些测试。Test suite可以被嵌套。
为了创建测试类的test suite,在你的test suite中添加 @RunWith(Suite.class) 和 @Suite.SuitClasses() 注解,在 @Suite.SuiteClasses(),列出测试类或者test suite(嵌套)。
示例如下:

import com.example.android.testing.mysample.CalculatorAddParameterizedTest;
import com.example.android.testing.mysample.CalculatorInstrumentationTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

// 运行所有的单元测试
@RunWith(Suite.class)
@Suite.SuiteClasses({CalculatorInstrumentationTest.class,
        CalculatorAddParameterizedTest.class})
public class UnitTestSuite {}

本文作者:宋志辉
个人微博:点击进入

时间: 2024-10-01 09:30:07

3、Android构建仪表测试的相关文章

在android布局中测试能自动化点击按钮吗?

问题描述 在android布局中测试能自动化点击按钮吗? 我想测试程序的功能,想自动化大多数的用户交互.其中一个是按钮(一个需要用户交互的地方). 是否有可能自动化?是否违背安全呢? 解决方案 给你推荐一个文档,关于简单的Android自动化UI测试.Automated Unit Testing the Android UI 还有button.performClick();

在Linux平台及IPv4环境中构建IPv6测试环境

随着互联网技术的不断发展,传统的 IPv4 地址已不能满足用户的需要.新一代的 IPv6 协议也日益被广泛的接受和使用,越来越多的软件系统都要求支持 IPv6 网络协议.然而现有网络环境对 IPv6 的支持仍然非常有限,这给软件的开发和测试都带来了一定的困难.本文将介绍如何使用 Apache 在现有的 IPv4 网络中构建模拟的 IPv6 环境. 在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境 1 IPv6简介 IPv6(Internet Protocol Version 6)

logcat- 当运行Android的JUnit测试时,LogCat&amp;amp;#39;s Log.x() 在哪里输出?

问题描述 当运行Android的JUnit测试时,LogCat's Log.x() 在哪里输出? 当我通过测试TestCase和AndroidTestCase中的派生类来测试普通的java类时,LogCat输出消失. 那它是否仍然可以捕获这些输出信息?或者说我只能使用更缓慢的ActivityInstrumentationTestCase2 < >作为基类? 解决方案 我在 Android 2.1中也遇见相似的问题.Eclipse中可查看logcat,但在Android Junit模式中运行程序

《黑客秘笈——渗透测试实用指南(第2版)》—第1章1.5节构建渗透测试环境

1.5 构建渗透测试环境 在本书第1版中,收到很多关于为什么要让读者搭建和安装工具而不是创建脚本自动化完成这些工作的评论.主要原因是想让读者亲自经历这些步骤,这些工具都非常重要,搭建和安装的过程将有助于您知道武器库里都有什么工具.以Kali Linux为例,它包括大量工具,而且进行了很好的组织和归类,但是如果不知道这个工具已经安装了或者没使用它进行过单独的攻击,那么在紧急的情况下很难正确使用这个工具. 1.5.1 安装一个渗透测试环境 如果您根据本书第1版建立了测试环境,就可以跳过本节.众所周知

android真机测试连接不上服务器

问题描述 android真机测试连接不上服务器 本人新手,按照网上的教程写socket通信 在模拟器上能够连接到服务器,但在真机上测试时始终连接不上,是什么情况啊??? 解决方案 从网上看到,基本上有着三种方法实现如题功能: (1)将应用后台服务器部署到某台可以通过公网访问的服务器上,手机访问该公网IP地址,类似于公网试用 (2)设置局域网,手机通过WIFI访问局域网中的某台服务器(拥有局域网IP地址) (3)Android的Internet传输功能 由于没有公网IP,所以方法一不可行,由于自己

Android触屏测试实例代码_Android

本文实例详细描述了Android触屏测试代码,可实现对触屏的点击.移动.离开等事件的处理,对于Android初学者有很好的借鉴价值. 具体功能代码如下: package com.test; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import

Android Monkey压力测试详细介绍_Android

Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试 阅读目录 环境搭建 什么是Monkey Monkey 用来做什么 Monkey程序介绍 Monkey 架构 Monkey弱点 Monkey 参数大全 Monkey 命令 基本参数介绍 Monkey 实例 Monkey 查看包名 Monkey  日志分析 必须重视Crash 环境搭建 安装Android SD

微软采用全新方式构建、测试和更新Windows 9系统

内部代号为" Threshold"的Windows 9即将于今晚揭开神秘面纱,但在发布会前夕依然有众多细节流出.援引外媒ZDNet报道相比较此前操作系统在Windows 9上构建.测试和更新微软都会采用丰富多样不同的方式.事实上微软将Windows系统作为一项非常重要的服务进行拓展构思,就意味着微软需要收集大量的信息来确保符合消费者需求,同时也意味着微软能够更快的确保更新.完善功能,让用户使用更加顺畅.ZDNet报道称:"有消息称微软创建了名为'Asimov'的全新实时遥测系

6、Android Content Provider测试

如果你的应用中使用了Content Provider来与其他应用进行数据交互,你需要对Content Provider进行测试来确保正常工作. 创建Content Provider整合测试 在Android中,app将Content Provider视为数据API.一个Content Provider可能会有public 常量. Content Provider允许你访问真实的用户数据,所以必须在一个隔离的测试环境中来测试你的Content Provider.这就意味着你的测试不会更改真实的用户