Jetpack Compose UI测试遇‘Instrumentation run failed due to Process crashed’报错求助
解决Jetpack Compose UI测试出现
Instrumentation run failed due to Process crashed.的方案 针对你遇到的问题,结合测试代码,给出以下排查和解决方向:
1. 检查Hilt测试的Application配置
Hilt Android测试需要使用HiltTestApplication或自定义的Hilt测试Application类。确保你的测试包下有对应的配置:
- 在
src/androidTest/AndroidManifest.xml中指定测试Application:
<application android:name="com.example.yourpackage.HiltTestApplication" ...> </application>
如果没有自定义测试Application,直接使用官方的HiltTestApplication,记得在依赖中添加:
androidTestImplementation "com.google.dagger:hilt-android-testing:2.44"
2. 调整测试Rule的初始化方式
建议使用createAndroidComposeRule替代createComposeRule,后者是纯Compose测试,不依赖Android上下文,而你的测试用到了Hilt(需要Android环境)。修改后的Rule:
@get:Rule(order = 1) val composeTestRule = createAndroidComposeRule<YourHostActivity>() // 替换为你的宿主Activity类
同时保证setup方法中先完成Hilt注入,再执行后续测试逻辑:
@Before fun setup() { hiltRule.inject() }
3. 排查资源加载是否引发崩溃
你的测试中加载了/surveyQuestion.json,需确认:
- 文件是否放在
src/androidTest/resources目录下(注意是androidTest的resources,不是main目录下的) loadFileText方法是否正确读取文件,是否存在IO异常或JSON解析错误。可以在测试中添加异常捕获,定位问题:
@Test fun entryQuestionLayout(){ try { val entryQuestionJson = loadFileText(this, "/surveyQuestion.json") val entryQuestion = Gson().fromJsonToArrayList(entryQuestionJson, Question::class.java)[0] composeTestRule.setContent { VitaminScreen(false, entryQuestion, {},{},{}) } composeTestRule.onNodeWithText("scientific").assertIsDisplayed() composeTestRule.onNodeWithText("professional").assertIsDisplayed() } catch (e: Exception) { e.printStackTrace() throw e } }
4. 检查VitaminScreen的依赖初始化
VitaminScreen可能依赖未被Hilt注入的对象(如ViewModel、Repository等),导致测试中实例化时崩溃:
- 确保VitaminScreen中所有依赖都通过Hilt注入,测试中Hilt已正确提供这些依赖的实例或模拟实现
- 如果使用ViewModel,确保在Compose中通过
hiltViewModel()获取,而非直接实例化
5. 排查测试环境问题
- 尝试更换测试设备(比如从模拟器换成真机,或切换不同API版本的模拟器),部分旧API版本的模拟器可能存在Compose测试兼容性问题
- 关闭设备上占用资源的后台程序,避免因内存不足导致进程崩溃
内容的提问来源于stack exchange,提问作者c-an
相关产品推荐
相关产品推荐

