《Android 应用测试指南》——第1章,第1.5节Android测试框架

简介:

本节书摘来自异步社区《Android 应用测试指南》一书中的第1章,第1.5节Android测试框架,作者 【阿根廷】Diego Torres Milano(迭戈 D.),更多章节内容可以访问云栖社区“异步社区”公众号查看

1.5 Android测试框架
Android提供了一个高级的测试框架,这个框架是JUnit的一个扩展,在标准JUnit的基础上插入了方便执行上述测试的插件。有的情况下,我们需要再装一些工具,而且集成这些工具大多情况下都很简单和直接。

Android测试环境的关键特性包括以下这些:
Android在JUnit框架基础上扩展了访问系统对象的方法;
通过模拟器框架可以测试应用和控制器;
提供了常用的、不同版本的系统对象的模拟器;
提供了执行单个用例、用例集的工具,无须模拟器;
提供测试用例、工程的管理工具,在ADT的Eclipse插件中,用命令行来控制。

1.5.1 模拟器
模拟器框架是测试框架的基础。模拟器控制被测的应用,并且允许插入桩来模拟应用的某些部件的执行。比如,你可以在应用启动之前创建模拟的Context,应用程序将会用模拟的Context来执行。

所有的应用程序跟周边环境的交互都可以通过上述方式来控制。你可以将应用程序封闭到一个十分严谨单一的条件下来得到预期的结果,强行设置某些方法的输出或者模拟ContentProvider中的常量、数据库、甚至文件系统的内容。

一个标准的Android工程都会有相应的测试工程,这个测试通常以Test开头。在Test工程中,AndriodManifest.xml中定义了使用的机器。

举个例子描述,假设你的工程配置文件如框1.5所示。

框1.5 主工程的AndriodManifest.xml配置文件

< ?xml version="1.0" encoding="utf-8"?>
< manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aatg.sample"
android:versionCode="1"
android:versionName="1.0">
< application android:icon="@drawable/icon"
android:label="@string/app_name">
< activity android:name=".SampleActivity"
android:label="@string/app_name">
< intent-filter>
< action android:name="android.intent.action.MAIN" />
< category android:name=
"android.intent.category.LAUNCHER" />
< /intent-filter>
< /activity>
< /application>
< uses-sdk android:minSdkVersion="7" />
< /manifest>

在这个项目里,相关的测试工程配置文件AndriodManifest.xml如框1.6所示。

框1.6 测试工程的AndriodManifest.xml配置文件

< ?xml version="1.0" encoding="utf-8"?>
< manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aatg.sample.test"
android:versionCode="1" android:versionName="1.0">
< application android:icon="@drawable/icon"
android:label="@string/app_name">
< uses-library android:name="android.test.runner" />
< /application>
< uses-sdk android:minSdkVersion="7" />
< instrumentation
android:targetPackage="com.example.aatg.sample"
android:name="android.test.InstrumentationTestRunner"
android:label="Sample Tests" />
< uses-permission android:name="
android.permission.INJECT_EVENTS" />
< /manifest>

这里的模拟器包作为主项目包,带着.test后缀。

定义模拟器的时候,会指定目标包和测试执行器,在这个情况下,默认的客户端执行器是android.test.InstrumentationTestRunner。

另外,被测应用和测试工程一样,都是apk安装的Android程序。它们都在同一个进程中,因此,能访问相同的功能特性。

当你执行一个测试应用程序的时候,行为管理器(http://developer.andriod.com/intl/de/reference/andriod/app/ActivityManager.html)利用模拟器框架来启动和控制测试执行器,然后测试执行器反过来利用模拟器工具来关闭主程序运行的实例,启动测试进程,最后,在同一个进程中启动主程序。这种方式使得各种各样的测试应用可以直接在主应用中工作。

1.5.2 测试对象
在项目开发过程中,你的测试用例必须在不同的设备上执行。从操作简单、方便,到响应速度等方面考虑,都要求最后必须在具体设备上测试,并且是在所有类型的设备上测试。

当然,有的测试用例会在本地JVM虚拟机上执行,有的用例在开发机上执行,有的在Dalvik或者活动虚拟机上执行,具体情况取决于测试用例的特点。

上述执行用例的方式都有各自的优缺点,幸运的是,你可以自由决定如何来执行你的用例。

仿真器是一个非常棒的执行平台,可能是最强大的,因为它可以让你修改测试过程中所有的参数、配置以及各种执行环境。测试最根本的目的是让你的程序能够正确处理所有场景,因此,最好在程序发布之前发现所有的问题。

性能测试需要使用真机,因为模拟仿真设备多少跟真机会有不同的地方。只有用真机才能体会到用户的真实感受。渲染、滚屏、投掷以及其他场景都需要发布之前用真机测试一次。

相关文章
|
1天前
|
安全 Java Android开发
构建高效Android应用:采用Kotlin进行内存优化的策略
【5月更文挑战第8天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,合理管理内存资源是确保应用流畅运行的关键因素之一。近年来,Kotlin作为官方推荐的开发语言,以其简洁、安全和互操作性的特点受到开发者青睐。本文将深入探讨利用Kotlin语言特性,通过具体策略对Android应用的内存使用进行优化,旨在帮助开发者提高应用性能,减少内存消耗,避免常见的内存泄漏问题。
3 0
|
1天前
|
编解码 调度 Android开发
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
4 0
|
2天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin协程的全面应用
【5月更文挑战第7天】 在移动开发领域,性能优化与流畅的用户体验是至关重要的。随着Kotlin语言的流行,其并发神器——协程,已成为提升Android应用性能的重要工具。本文将深入探讨如何在Android项目中利用Kotlin协程进行异步编程、网络请求和数据库操作,以及如何通过协程简化代码结构,增强应用的响应性和稳定性。我们的目标是为开发者提供一套实用的协程使用模式和最佳实践,以便构建更加高效的Android应用。
15 3
|
2天前
|
JSON 前端开发 JavaScript
快照测试在前端自动化测试中的应用
在前端自动化测试中,快照测试常用于检验组件渲染与布局。
|
2天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin与协程的完美结合
【5月更文挑战第7天】 在移动开发领域,性能优化和资源管理始终是核心议题。随着Kotlin语言的普及,其提供的协程特性为Android开发者带来了异步编程的新范式。本文将深入探讨如何通过Kotlin协程来优化Android应用的性能,实现流畅的用户体验,并减少资源消耗。我们将分析协程的核心概念,并通过实际案例演示其在Android开发中的应用场景和优势。
|
3天前
|
敏捷开发 测试技术 持续交付
深入理解自动化测试:框架与实践
【5月更文挑战第5天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速交付过程的关键环节。本文将深入探讨自动化测试的核心概念、框架选择以及实际实施过程中的最佳实践。通过分析各种自动化测试工具和技术的优缺点,我们旨在为读者提供一种系统化的方法来构建和维护有效的自动化测试环境。
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试中AI驱动的决策框架设计与实现
【5月更文挑战第5天】 在软件测试领域,自动化测试已成为提升测试效率和质量的关键手段。然而,随着软件系统的复杂性增加,传统的自动化测试方法面临挑战,尤其在测试用例的生成、执行及结果分析等方面。本文提出一种基于人工智能(AI)的自动化测试决策框架,旨在通过智能化的算法优化测试过程,并提高异常检测的准确率。该框架结合机器学习和深度学习技术,能够自学习历史测试数据,预测高风险变更区域,自动生成针对性强的测试用例,并在测试执行过程中实时调整测试策略。此外,通过自然语言处理(NLP)技术,该框架还能对测试结果进行语义分析,进一步提供更深入的洞察。本研究不仅增强了自动化测试工具的智能性,也为软件质量保证提
|
4天前
|
敏捷开发 JavaScript 测试技术
深入理解与应用软件测试中的Mock技术
【5月更文挑战第5天】 在现代软件开发过程中,单元测试作为保障代码质量的重要环节,其独立性和可靠性至关重要。Mock技术应运而生,为开发者提供了一种在隔离环境下模拟外部依赖的方法。本文将深入探讨Mock技术的概念、实现方式及其在软件测试中的应用,旨在帮助读者更好地理解和运用这一强大的测试工具,以提升测试效率和软件质量。
|
5天前
|
移动开发 前端开发 Android开发
构建高效Android应用:探究Kotlin协程的优势
【5月更文挑战第4天】 在移动开发领域,尤其是对于Android开发者而言,编写响应迅速且高效的应用程序至关重要。Kotlin作为一种现代的编程语言,其提供的协程特性为异步编程带来了革命性的改变。本文将深入探讨Kotlin协程在Android开发中的应用优势,并通过实例代码展示如何利用协程简化异步任务处理,提高应用性能和用户体验。
|
5天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能对比
【5月更文挑战第4天】在移动开发的世界中,性能一直是衡量应用质量的重要指标。随着Kotlin的兴起,许多Android开发者开始考虑是否应该从传统的Java迁移到Kotlin。本文通过深入分析两者在Android平台上的性能差异,帮助开发者理解Kotlin在实际项目中的表现,并提供选择编程语言时的参考依据。
20 5