借助 Glance 单元测试 API,您可以测试 Glance 代码,而无需扩充视图或使用 UI Automator。例如,借助单元测试 API,您可以使用匹配器(例如 hasContentDescriptionEqualTo
或 isChecked
)验证条件,例如元素是否位于列表中或复选框是否已选中。
此 API 轻巧且所需的设置较少,因此您可以在开发 widget 的各个部分并对其进行整理以提高代码重用率的同时,执行测试驱动的开发。
设置
以下示例展示了使用单元测试库所需的依赖项:
// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
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()
方法读取上下文,则必须使用 setContext()
设置上下文。否则,此步骤是可选的。
您可以使用任何基于 JVM 的 Android 单元测试框架(例如 Robolectric)来提供上下文。
如果可组合函数访问 LocalSize
,请在测试中提供可组合函数之前,为测试设置预期大小。默认大小为 349.dp x 455.dp,相当于在 Pixel 4 设备上以竖屏模式显示的 5x4 widget。
- 如果您的 AppWidget 使用
sizeMode == Single
,您可以在 widget 的info.xml
文件中将此属性设置为minWidth
和minHeight
。 - 如果您的 AppWidget 使用
sizeMode == Exact
,您可以采用与确定微件尺寸类似的方式来确定要测试的尺寸,并确定微件可能显示的横屏和竖屏尺寸,然后针对这些尺寸进行测试。 - 如果您的 AppWidget 使用
sizeMode == Responsive
,您可以将其设置为指定sizeMode
时提供的列表中的某个尺寸。
测试超时的默认时长为 1 秒,但如果您的测试基础架构强制执行不同的超时时间,您可以将自定义时长作为实参传递给 runGlanceAppWidgetUnitTest
方法。
如需了解详情和代码示例,请参阅 runGlanceAppWidgetUnitTest
的参考文档。