开发测试计划

了解哪些地方需要测试以及哪些地方测试不会增加显著价值非常重要。本文档旨在阐明这种区别。

一般来说,无需测试 Android 框架是否按其说明执行。如果代码路径设置了 TextView 的值,则无需编写 Espresso 或 Robolectric 测试来检查 TextView 是否已设置。这就是 Google 的 Android 框架团队拥有测试的原因。Espresso 测试在运行时方面成本很高,应用于确保我们所有软件单元作为一个整体正确集成在一起。即使 Robolectric 也对测试运行时造成明显的成本,但它有其合适的用途。

组件

我们的应用程序架构由渲染 UI 的组件绑定在一起。通常,为每个 UI 组件编写一组单元测试但模拟视图是明智的。这可以通过为组件创建 Spy 来实现。可以使用 RxKotlin TestObservers 观察被测组件的输入和输出。

在测试组件时,务必测试任何重要的逻辑。如果 reducer 的逻辑不仅仅是 Kotlin copy() 运算符,则应对其进行测试。

UIViews

在测试 UIViews 时,我们不需要验证是否进行了 TextView set 调用,但应验证存在的任何分支逻辑。如果 ViewState 基本上还没有准备好显示,则这些转换可能属于组件,应在组件中进行测试。如果 UIView 类只是从 ViewState 直接到 UI 的直通管道,则无需进行单元测试。

片段

片段可能变得复杂。理论上,如果架构正确集成,则不应该存在太多 View 逻辑。可以模拟任何组件以及执行布局的扩展方法,然后使用 Robolectric 验证重要逻辑。

通常,不应该在 Android 生命周期回调内直接存在大型分支块。这些应该分解成方法,这些方法可以单独测试。

活动

活动应该只作为应用程序的入口点存在,以显示片段。逻辑应该有限,并且应该作为 Robolectric 测试与 TestNavigators 一起测试以测试导航。