使用Jetpack Compose+Hilt+JUnit4做Android UI测试时遇报错求助
解决Hilt UI测试应用配置错误
问题原因
Hilt测试要求使用专门的测试应用(HiltTestApplication或自定义测试应用),你的测试当前默认使用了主应用的@HiltAndroidApp类,导致规则冲突。
解决方案
1. 确认测试依赖配置
在Module级别的build.gradle(或build.gradle.kts)中添加Hilt测试依赖,版本需与项目中Hilt主版本保持一致:
// Groovy示例 androidTestImplementation "com.google.dagger:hilt-android-testing:2.48" kaptAndroidTest "com.google.dagger:hilt-compiler:2.48" // Kotlin DSL示例 androidTestImplementation("com.google.dagger:hilt-android-testing:2.48") kaptAndroidTest("com.google.dagger:hilt-compiler:2.48")
2. 配置测试应用
方式一:使用默认HiltTestApplication
在androidTest目录下创建AndroidManifest.xml文件,指定测试应用为Hilt官方提供的测试类:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kelvinquantic.danamon"> <!-- 与主应用包名保持一致 --> <application android:name="dagger.hilt.android.testing.HiltTestApplication" /> </manifest>
方式二:自定义测试应用(如需扩展测试逻辑)
在androidTest目录下创建测试应用接口:
@CustomTestApplication(MainApplication::class) interface TestApplication
然后在测试的AndroidManifest.xml中指定生成的测试应用类:
<application android:name="com.kelvinquantic.danamon.TestApplication_HiltComponents" />
3. 调整测试类(可选)
如果LoginPageScreen依赖Activity上下文,将createComposeRule()替换为对应Activity的Compose规则:
@get:Rule(order = 1) val composeTestRule = createAndroidComposeRule<LoginActivity>()
同时移除setContent中的手动主题和页面设置,直接依赖Activity的启动逻辑。
4. 重新运行测试
执行Build > Clean Project清理项目后,重新运行测试即可。
内容的提问来源于stack exchange,提问作者kelvin Prayitno
相关产品推荐
相关产品推荐

