Android测试官方教程翻译(三)--构建设备单元测试
2017-01-19 23:35
507 查看
翻译难有谬误,错误之处敬请指出。遇到不理解之处请对照官方英文资料。
mock object,mocking framework在前两篇博文中也多次出现,不知如何翻译,就翻译为模仿对象和模仿框架
本篇中test suite有的地方翻译为测试套件,有的地方直接使用英文
官方原文链接 Building Instrumented Unit Tests
设备单元测试
设置你的测试环境
创建设备单元测试类
创建测试套件
运行设备单元测试
使用Firebase Test Lab运行测试
使用设备单元测试也能够减少编写和维护模仿代码的工作量。你仍然能够使用模仿框架,如果你选择如此,来模拟任何依赖关系。
在你开始之前,你应该下载 Android Testing Support Library Setup ,它提供了允许你对app快速构建和运行设备测试代码的APIs。Testing Support Library包含了一个JUnit 4 test runner 和功能UI测试的APIs(Espresso 和 UI Automator,链接见译文一)。
你还需要给你的工程配置Android测试依赖,以使用Testing Support Library提供的 test runner 和 规则(rule)。为了简化测试环境,你应当引入 Hamcrest 库,它能让你使用Hamcrest matcher APIs创建更加灵活的assertion。
在App的最高层级 build.gradle 文件中,你需要指定这些库作为依赖。
注意:如果你的构建配置包含了support-annotations 库的compile 依赖和espresso-core 库的androidTestCompile 依赖,你的构建由于依赖冲突可能失败。为了解决问题,像如下方法更新espresso-core依赖。
为了创建一个设备JUnit 4测试类,在测试类定义起始处添加注释@RunWith(AndroidJUnit4.class)。你还需要指定Android Testing Support Library 提供的 AndroidJUnitRunner为默认test runner。这一步骤在Getting Started with Testing(译文第一篇)中有详尽描述。
下面示例展示了你如何编写一个设备单元测试来测试LogHistory类的Parcelable 接口实现正确。
一个test suite包含在一个测试包中,类似于主应用包。按照惯例,test suite的包名经常以 .suite的后缀结尾(比如com.example.android.testing.mysample.suite)。
为单元测试创建test suite,import JUnit的 RunWith和Suite类。在你的test suite中,添加 @RunWith(Suite.class) 和 @Suite.SuitClasses() 注释。在@Suite.SuitClasses() 中,列出单独的测试类或者test suite 作为参数。
以下示例展示了你如何实现一个分组并且CalculatorInstrumentationTest 和 CalculatorAddParameterizedTest 测试类一起运行的类名为UnitTestSuite的test suite。
点击工具栏的Sync Project
,确保工程和gradle同步。
用以下方式之一运行测试
运行单一测试,打开Project 窗口,然后右键点击一个测试并且点击Run
测试一个类中的所有方法,右键点击测试文件的一个类或者方法,然后点击Run
运行一个路径下的所有测试,右键点击该路径,然后选择Run Tests
Android的gradle插件编译位于缺省路径(src/androidTest/java/)的设备测试代码,构建一个测试APK和产物APK(production APK),将两个APK安装到连接的设备或者模拟器上,然后运行测试。Android Studio 然后在Run 窗口显示设备测试执行的结果。
当运行或者debugging设备测试,Android Studio 并不注入 Instant Run需要的额外方法和关闭特性。
在你开始使用 Firebase Test Lab之前,你需要依照如下操作,除非你已经有了Google账户和一个Firebase 工程。
如果你没有账户,创建一个Google账户 。
在Firebase控制台 ,点击Create new project。
在Spark计划:每日免费配额 之内,使用Test Lab测试App免费。
PS: 这一部分没翻译完,所剩不多,考虑到国内无法使用google服务/收费/我没这个需求,不在翻译剩余部分。
mock object,mocking framework在前两篇博文中也多次出现,不知如何翻译,就翻译为模仿对象和模仿框架
本篇中test suite有的地方翻译为测试套件,有的地方直接使用英文
官方原文链接 Building Instrumented Unit Tests
设备单元测试
设置你的测试环境
创建设备单元测试类
创建测试套件
运行设备单元测试
使用Firebase Test Lab运行测试
设备单元测试
设备单元测试是运行在物理设备和模拟器上的测试,他们能够利用Android Framework APIs和supporting APIs,比如Android Testing Support Library。如果你的测试需要获取instrumentation信息(比如目标app的context)或者需要Android框架组件(比如Parcelable o或者SharedPreferences 对象)的实际实现,你应当创建设备单元测试。使用设备单元测试也能够减少编写和维护模仿代码的工作量。你仍然能够使用模仿框架,如果你选择如此,来模拟任何依赖关系。
设置你的测试环境
在你的AndroidStudio工程中,你必须存储设备测试的源文件在路径 module-name/src/androidTest/java/ 下。在你创建新的工程时这个路径已经存在,并且包含了一个设备测试的例子。在你开始之前,你应该下载 Android Testing Support Library Setup ,它提供了允许你对app快速构建和运行设备测试代码的APIs。Testing Support Library包含了一个JUnit 4 test runner 和功能UI测试的APIs(Espresso 和 UI Automator,链接见译文一)。
你还需要给你的工程配置Android测试依赖,以使用Testing Support Library提供的 test runner 和 规则(rule)。为了简化测试环境,你应当引入 Hamcrest 库,它能让你使用Hamcrest matcher APIs创建更加灵活的assertion。
在App的最高层级 build.gradle 文件中,你需要指定这些库作为依赖。
dependencies { androidTestCompile 'com.android.support:support-annotations:24.0.0' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' // Optional -- Hamcrest library androidTestCompile 'org.hamcrest:hamcrest-library:1.3' // Optional -- UI testing with Espresso androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' // Optional -- UI testing with UI Automator androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' }
注意:如果你的构建配置包含了support-annotations 库的compile 依赖和espresso-core 库的androidTestCompile 依赖,你的构建由于依赖冲突可能失败。为了解决问题,像如下方法更新espresso-core依赖。
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' })
创建设备单元测试类
你的设备单元测试类应当编写成如同JUnit 4测试类。学习更多创建JUnit 4测试类和使用assertion以及annotation,查看”创建本地单元测试类”(译文第二篇)。为了创建一个设备JUnit 4测试类,在测试类定义起始处添加注释@RunWith(AndroidJUnit4.class)。你还需要指定Android Testing Support Library 提供的 AndroidJUnitRunner为默认test runner。这一步骤在Getting Started with Testing(译文第一篇)中有详尽描述。
下面示例展示了你如何编写一个设备单元测试来测试LogHistory类的Parcelable 接口实现正确。
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() { // Set up the Parcelable object to send and receive. mLogHistory.addEntry(TEST_STRING, TEST_LONG); // Write the data. Parcel parcel = Parcel.obtain(); mLogHistory.writeToParcel(parcel, mLogHistory.describeContents()); // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0); // Read the data. LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel); List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData(); // Verify that the received data is correct. 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的包名经常以 .suite的后缀结尾(比如com.example.android.testing.mysample.suite)。
为单元测试创建test suite,import JUnit的 RunWith和Suite类。在你的test suite中,添加 @RunWith(Suite.class) 和 @Suite.SuitClasses() 注释。在@Suite.SuitClasses() 中,列出单独的测试类或者test suite 作为参数。
以下示例展示了你如何实现一个分组并且CalculatorInstrumentationTest 和 CalculatorAddParameterizedTest 测试类一起运行的类名为UnitTestSuite的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; // Runs all unit tests. @RunWith(Suite.class) @Suite.SuiteClasses({CalculatorInstrumentationTest.class, CalculatorAddParameterizedTest.class}) public class UnitTestSuite {}
运行设备单元测试
运行设备单元测试,遵循以下步骤。点击工具栏的Sync Project
,确保工程和gradle同步。
用以下方式之一运行测试
运行单一测试,打开Project 窗口,然后右键点击一个测试并且点击Run
测试一个类中的所有方法,右键点击测试文件的一个类或者方法,然后点击Run
运行一个路径下的所有测试,右键点击该路径,然后选择Run Tests
Android的gradle插件编译位于缺省路径(src/androidTest/java/)的设备测试代码,构建一个测试APK和产物APK(production APK),将两个APK安装到连接的设备或者模拟器上,然后运行测试。Android Studio 然后在Run 窗口显示设备测试执行的结果。
当运行或者debugging设备测试,Android Studio 并不注入 Instant Run需要的额外方法和关闭特性。
使用Firebase Test Lab运行测试
使用Firebase Test Lab ,你可以在许多流行设备和设备配置(地区、屏幕方向、屏幕尺寸和平台版本)上同时测试App。这些测试运行在远端google数据中心的物理和虚拟设备上。你可以通过Android Studio 或者命令行直接部署app到Test Lab。测试结果提供了测试日志,并且包括任何App失败的详情。在你开始使用 Firebase Test Lab之前,你需要依照如下操作,除非你已经有了Google账户和一个Firebase 工程。
如果你没有账户,创建一个Google账户 。
在Firebase控制台 ,点击Create new project。
在Spark计划:每日免费配额 之内,使用Test Lab测试App免费。
PS: 这一部分没翻译完,所剩不多,考虑到国内无法使用google服务/收费/我没这个需求,不在翻译剩余部分。
相关文章推荐
- Android测试官方教程翻译(二)--构建本地单元测试
- Android测试官方教程翻译(一)--Android 测试介绍
- 史上最全Android开发资料:资源、UI、函数库、测试、构建全套教程
- Android官方教程翻译(1)——创建第一个Android应用
- Android Web App官方文档翻译第三章:WebView构建应用
- Android官方技术文档翻译——新构建系统概述
- 最值得看的android系统fragment教程--翻译自安卓官方文档
- 史上最全Android开发资料:资源、UI、函数库、测试、构建全套教程
- Android官方教程翻译(5)——设置ActionBar
- Direct9入门教程|Direct9官方提供的tutorial文件自己翻译的|DirectX创建设备
- 基于Android设备的Kali Linux渗透测试教程第1章渗透测试
- Android官方技术文档翻译——新构建系统概述
- Android官方教程翻译(2)——运行第一个程序
- Android中Fragment的应用(android官方教程完美翻译)
- Android Web App官方文档翻译第三章:WebView构建应用
- Android官方教程翻译(1)——创建第一个Android应用
- Android官方教程翻译(3)——创建一个简单的用户界面
- Android官方教程翻译(4)——启动另一个Activity
- Android官方技术文档翻译——构建工作流
- 基于Android设备的Kali Linux渗透测试教程第1章渗透测试