使用 Glance 进行单元测试

借助 Glance 单元测试 API,您可以在不膨胀视图的情况下测试 Glance 代码 还是需要使用 UI Automator例如,借助单元测试 API 条件,例如元素是否在列表中,或者框是否已 并使用 hasContentDescriptionEqualToisChecked 等匹配器进行检查。

此 API 是轻量级的,需要较少的设置,因此您可以执行由测试驱动 开发微件的各个部分,并将它们进行整理, 改进代码重用

设置

使用单元测试库所需的依赖项显示在 示例:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.0'
testImplementation 'androidx.glance:glance-AppWidget-testing:1.1.0'
testImplementation 'org.robolectric:robolectric:4.11.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

测试结构

GlanceAppWidget 类之外整理可组合函数以启用 代码重用和单元测试降低被测单元的复杂性,如下所示: 尽可能多。

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasAuthorAsSubtitle() = runGlanceAppWidgetUnitTest {
        // Prepare inputs and state
        setAppWidgetSize(100.dp, 100.dp)

        // Set the composable under test
        provideComposable {
            MyNewsItemComposable(TEST_NEWS_ITEM)
        }

        // Perform assertions
        onNode(hasTestTag("subTitle"))
            .assertHasText(TEST_NEWS_ITEM.authorName)
    }
}

设置测试的上下文和大小

如果您的可组合函数使用 LocalContext.current() 读取上下文 方法,必须使用 LocalContext.current() 方法设置上下文。 否则,此步骤是可选的。

您可以使用任何基于 JVM 的 Android 单元测试框架(如 Roboletric), 提供上下文。

如果您的可组合函数访问 LocalSize,请设置预期尺寸 测试,然后再在测试中提供可组合项。默认大小为 349.dp x 455.dp,相当于 Pixel 4 设备上显示的 5x4 widget 纵向模式

  • 如果您的 AppWidget 使用 sizeMode == Single,您可以将此属性设为 在 widget 的 info.xml 文件中使用 minWidthminHeight
  • 如果您的 AppWidget 使用 sizeMode == Exact,您可以标识 测试方式与确定 widget 大小类似, 确定您的 widget 可能会在横向和纵向尺寸的平台上展示,并测试 。
  • 如果您的 AppWidget 使用 sizeMode == Responsive,则您可以将此属性设置为以下值之一: 指定 sizeMode 时提供的列表中的尺寸。

测试超时的默认时长为 1 秒,但您可以通过自定义 将时长作为参数传递给 runGlanceAppWidgetUnitTest 方法(如果您的测试是这样的) 基础架构会强制执行不同的超时。

有关详情和代码示例,请参阅 runGlanceAppWidgetUnitTest