测试应用

Android Studio 以简化测试为设计宗旨。 您只需完成几次点击,便可建立一个在本地 JVM 上运行的 JUnit 测试,或建立一个在设备上运行的仪器测试。

当然,您也可以通过集成测试框架来扩展测试能力,例如可以集成 Mockito 在本地单元测试中测试 Android API 调用,以及集成 EspressoUI Automator 在仪器测试中演练用户交互。

您可以利用 Espresso 测试记录器自动生成 Espresso 测试。

此页面提供的基本信息介绍了如何在 Android Studio 中新增和运行测试。

如需更完整的测试编写方法指南,请参阅测试入门指南

测试类型和位置

测试代码的位置取决于您要编写的测试的类型。Android Studio 为以下两种测试类型提供了源代码目录(源集):

  • 本地单元测试
  • 位于 module-name/src/test/java/

这些测试在计算机的本地 Java 虚拟机 (JVM) 上运行。当您的测试没有 Android 框架依赖项或当您可以模拟 Android 框架依赖项时,可以利用这些测试来尽量缩短执行时间。

在运行时,这些测试的执行对象是去掉了所有 final 修饰符的修改版 android.jar。 这样一来,您就可以使用 Mockito 之类的常见模拟库。

  • 仪器测试
  • 位于 module-name/src/androidTest/java/

这些测试在硬件设备或模拟器上运行。 这些测试有权访问 InstrumentationAPI,让您可以获取某些信息(例如您要测试的应用的 Context),并且允许您通过测试代码来控制受测应用。 可以在编写集成和功能 UI 测试来自动化用户交互时,或者在测试具有模拟对象无法满足的 Android 依赖项时使用这些测试。

由于仪器测试内置于 APK 中(与您的应用 APK 分离),因此它们必须拥有自己的 AndroidManifest.xml 文件。 不过,由于 Gradle 会自动在构建时生成该文件,因此它在您的项目源集中不可见。 您可以在必要时(例如需要为 minSdkVersion 指定其他值或注册测试专用的运行侦听器时)添加自己的清单文件。 构建应用时,Gradle 会将多个清单文件合并成一个清单。

Gradle 构建解读这些测试源集的方式与其解读项目应用源集的方式相同,您可以利用这一点根据构建变体创建测试

当您新建项目或添加应用模块时,Android Studio 会创建以上所列的测试源集,并在每个源集中加入一个示例测试文件。

您可以在 Project 窗口中看到它们,如图 1 所示。

Test your app - 图1

图 1. 您的项目的 (1) 仪器测试和 (2) 本地 JVM 测试在 Project

视图(左侧)或 Android 视图(右侧)中均可见。

添加一个新测试

要创建一个本地单元测试或仪器测试,您可以按照以下步骤新建针对特定类或方法的测试:

  • 打开包含您想测试的代码的 Java 文件。
  • 点击您想测试的类或方法,然后按 Ctrl+Shift+T (⇧⌘T)。
  • 在出现的菜单中,点击 Create New Test
  • Create Test 对话框中,编辑任何字段并选择任何要生成的方法,然后点击 OK

  • Choose Destination Directory 对话框中,点击与您想创建的测试类型对应的源集:androidTest 对应于仪器测试,test 对应于本地单元测试。

然后点击 OK

您也可以按如下所述在相应测试源集中创建一个通用 Java 文件:

  • 在左侧的 Project 窗口中,点击下拉菜单并选择 Project 视图。

  • 展开相应的模块文件夹和嵌套的 src 文件夹。要添加本地单元测试,请展开 test 文件夹和嵌套的 java 文件夹;要添加仪器测试,请展开 androidTest 文件夹和嵌套的 java 文件夹。

  • 右键点击 Java 软件包目录并选择 New > Java Class

  • 命名文件,然后点击 OK

此外,请务必在应用模块的 build.gradle 文件中指定测试库依赖项:

  1. dependencies {
  2. // Required for local unit tests (JUnit 4 framework)
  3. testCompile 'junit:junit:4.12'
  4. // Required for instrumented tests
  5. androidTestCompile 'com.android.support:support-annotations:24.0.0'
  6. androidTestCompile 'com.android.support.test:runner:0.5'
  7. }

如需了解其他可选库依赖项以及有关如何编写测试的详细信息,请参阅构建本地单元测试构建仪器单元测试

创建适用于构建变体的仪器测试

如果您的项目包括的构建变体具有唯一的源集,则您可能需要相应的仪器测试源集。

在源集中创建与您的构建变体对应的仪器测试有助于保持测试代码的条理性,也便于您只运行适用于给定构建变体的测试。

要添加适用于您的构建变体的测试源集,请执行以下步骤:

  • 在左侧的 Project 窗口中,点击下拉菜单并选择 Project 视图。

  • 在相应模块文件夹内,右键点击 src 文件夹,然后点击 New > Directory

  • 输入“androidTestVariantName”作为目录名称。例如,如果您的构建变型名为“MyFlavor”,则目录名称应为“androidTestMyFlavor”。

然后点击 OK。1. 右键点击新目录,然后点击 New > Directory。1. 输入“java”作为目录名称,然后点击 OK

现在您就可以按照以上新增测试的步骤向这个新源集添加测试了。 当您到达 Choose Destination Directory 对话框时,选择新的变体测试源集。

src/androidTest/ 源集中的仪器测试由所有构建变体共享。 构建适用于应用的“MyFlavor”变体的测试 APK 时,Gradle 会将 src/androidTest/src/androidTestMyFlavor/ 这两个源集合并。

例如,下表显示的就是仪器测试文件所在源集路径与应用代码源集路径的对应关系。

应用类的路径 对应仪器测试类的路径
src/main/java/Foo.java src/androidTest/java/AndroidFooTest.java
src/myFlavor/java/Foo.java src/androidTestMyFlavor/java/AndroidFooTest.java

Gradle 构建会合并和替换来自不同测试源集的文件,这与它对应用源集的处理方法完全相同。 在本例中,“androidTestMyFlavor”源集中的 AndroidFooTest.java 文件会替换“androidTest”源集中的版本。

如需了解有关源集合并方法的详细信息,请参阅配置构建

您应该为应用和测试源集使用构建变体的另一个原因是,通过模拟依赖项创建封闭测试。 也就是说,您可以为应用创建一个包含依赖项模拟实现(例如惯常不稳定的网络请求或设备传感器数据)的产品风味,然后添加一个对应的模拟测试源集。

如需了解详细信息,请参阅有关利用产品风味进行封闭测试的博文。

运行测试

要运行测试,请执行如下操作:

  • 点击工具栏中的 Sync Project Test your app - 图2,确保您的项目已与 Gradle 同步
    。1. 以下列其中一种方式运行测试: Project 窗口中,右键点击测试,然后点击 *RunTest your app - 图3
  1. * 在代码编辑器中,右键点击测试文件中的某个类或方法,然后点击 **Run** <img src="/studio/images/buttons/toolbar-run.png" class="inline-icon">

来测试该类中的所有方法。 要运行所有测试,右键点击测试目录,然后点击 *Run testsTest your app - 图4

默认情况下,您的测试运行时使用的是 Android Studio 默认的运行配置。 如果您想更改某些运行设置(例如仪器运行器和部署选项),可以在 Run/Debug Configurations 对话框中编辑运行配置(点击 Run > Edit Configurations)。

更改测试构建类型

默认情况下,所有测试均针对调试构建类型运行。 您可以利用模块级 build.gradle 文件中的 testBuildType 属性将其更改为其他构建类型。

例如,如果您想针对“staging”构建类型运行测试,请按下面这段代码中所示对该文件进行编辑。

  1. android {
  2. ...
  3. testBuildType "staging"
  4. }