用途
该技能为现代 Android 应用测试提供专家指导,灵感来自 "Now in Android" 项目。它覆盖单元测试(Unit Tests)、Hilt 集成测试(Hilt Integration Tests)与截图测试(Screenshot Testing),帮助开发者建立完整的测试策略。
测试金字塔
技能将测试分为三个层次:
- 单元测试(Unit Tests):快速、隔离逻辑,针对 ViewModels、Repositories 等。
- 集成测试(Integration Tests):测试交互,例如 Room DAOs、Retrofit 与 MockWebServer。
- UI/截图测试(UI/Screenshot Tests):验证 UI 正确性(Compose)。
依赖配置
技能要求在 libs.versions.toml 中配置正确的测试依赖,示例包括:
[libraries]
junit4 = { module = "junit:junit", version = "4.13.2" }
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version = "1.1.5" }
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version = "3.5.1" }
compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-junit4" }
hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" }
roborazzi = { group = "io.github.takahirom.roborazzi", name = "roborazzi", version.ref = "roborazzi" }
使用 Roborazzi 进行截图测试
截图测试用于确保 UI 不会出现视觉回归。NiA 使用 Roborazzi,因为它运行在 JVM 上(速度快),无需模拟器。
设置
在 libs.versions.toml 中添加插件:
[plugins]
roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
在模块的 build.gradle.kts 中应用:
plugins {
alias(libs.plugins.roborazzi)
}
编写截图测试
@RunWith(AndroidJUnit4::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@Config(sdk = [33], qualifiers = RobolectricDeviceQualifiers.Pixel5)
class MyScreenScreenshotTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
@Test
fun captureMyScreen() {
composeTestRule.setContent {
MyTheme {
MyScreen()
}
}
composeTestRule.onRoot()
.captureRoboImage()
}
}
Hilt 测试
使用 HiltAndroidRule 在测试中注入依赖:
@HiltAndroidTest
class MyDaoTest {
@get:Rule
var hiltRule = HiltAndroidRule(this)
@Inject
lateinit var database: MyDatabase
private lateinit var dao: MyDao
@Before
fun init() {
hiltRule.inject()
dao = database.myDao()
}
// ... tests
}
运行测试
- 单元测试:
./gradlew test - 截图测试:
./gradlew recordRoborazziDebug(录制)/./gradlew verifyRoborazziDebug(验证)
适用场景
适用于需要为现代 Android 应用(尤其是使用 Compose、Hilt、Room、Retrofit 的项目)建立测试策略的开发者,帮助组织单元测试、集成测试与截图测试。
限制
资料未提供关于该技能的具体版本要求、兼容性范围、性能数据或收费信息,暂未提供。