参考：[测试基础](https://developer.android.google.cn/training/testing/fundamentals)

### 使用迭代开发工作流

开发与测试是交替进行的。

### 理解测试金字塔

小型测试是单元测试。为金字塔底层，应占70％。

中型测试是集成测试。为金字塔中层，应占20％。

大型测试是集成和UI测试。为金字塔顶层，应占10％。

### 写小型测试

添加或修改程序的某个功能时，应使用单元测试。

#### Robolectric

与Android framework交互，应使用Robolectric进行单元测试。

#### Mock objects

测试与Android系统交互的元素，要使用像**Mockito**这样的框架来配置mock objects。

#### Instrumented unit tests

设备上的单元测试要比本地单元测试慢的多，所以最好只在评估应用程序在真实设备上的行为时才使用这种方法。

### 写中型测试

中型测试用于验证组件行为(components behave)。中型测试评估应用程序如何协调多个单元，但它们不测试完整的应用程序。中型测试的例子包括服务测试、集成测试和模拟外部依赖行为的封闭UI测试。

### 写大型测试

#### AndroidJUnitRunner

使JUnit3或JUnit4这样的测试类在Android上得到支持。它会帮助您将测试包和测试应用程序加载到设备或模拟器上，运行测试并报告结果。它还支持Android Test里如下的工具和框架：JUnit4 Rules, Espresso, UI Automator, Android Test Orchestrator。

#### JUnit4 Rules

详见[JUnit4 Rules](https://developer.android.google.cn/training/testing/junit-rules)

#### Espresso

详见[Espresso](https://developer.android.google.cn/training/testing/espresso/)

#### UIAutomator

**注意**：只有app与系统交互以完成关键用例时，才建议使用UI Automator。这是因为每次系统更新时都需要重新运行并修复UI Automator。使用[Espresso-Intents](https://developer.android.google.cn/training/testing/espresso/intents)可以编写较小的测试。

详见[UIAutomator](https://developer.android.google.cn/training/testing/ui-automator)

UIAutomator测试框架包含如下关键特性：

- `uiautomatorviewer`是一个检查布局层次的viewer。
- `UiDevice`是一个检索状态信息并操作目标设备的API。
- cross-API UI测试：`UiCollection`枚举容器中的元素。`UiObject`表示设备上可见的元素。`UiScrollable`表示可滚动的UI元素。`UiSelector`，`Configurator`。

#### Android Test Orchestrator

它在自己的沙箱中运行每个UI测试，从而提高了测试套件的可靠性。

详见[Android Test Orchestrator](https://developer.android.google.cn/training/testing/junit-runner#using-android-test-orchestrator)