使用RobolectricTestRunner测试时遇Shadow Package Parser相关RuntimeException
Robolectric测试中ShadowPackageParser引发的空指针异常解决方法
问题场景
测试类配置:
@RunWith(RobolectricTestRunner.class) @Config(application = RobolectricTestApp.class) public class YourRoomsActivityTest { @Test public void test_dummy() { // Required until real tests are added back } ... }
抛出的异常栈:
java.lang.RuntimeException at ShadowPackageParser.java:69
Caused by: android.content.pm.PackageParser$PackageParserException at PackageParser.java:1353
Caused by: java.lang.NullPointerException at CppAssetManager2.java:689
解决思路
- 匹配Robolectric与Android SDK版本
该异常多因版本不兼容导致。确认Robolectric版本支持当前项目的targetSdk级别,比如targetSdk=33对应Robolectric 4.12及以上版本。 - 清理项目缓存
本地缓存损坏可能引发资源加载异常:- 执行
./gradlew clean(Android项目) - 删除项目根目录下的
.gradle、build文件夹 - 重新同步项目后运行测试
- 执行
- 排查自定义测试Application
若RobolectricTestApp有自定义资源加载逻辑,可能在测试环境未初始化完全。可临时替换为默认测试Application验证:@Config(application = com.android.test.runner.MonitoringInstrumentation.TestApplication.class) - 关闭测试环境的资源压缩
开启minifyEnabled或shrinkResources可能导致Robolectric无法解析资源。在debug构建中关闭:android { buildTypes { debug { minifyEnabled false shrinkResources false } } } - 检查assets目录资源
assets目录下损坏、格式错误的文件(如XML、JSON)会导致AssetManager解析失败。排查新增或修改的assets文件,修复或移除异常文件。
内容的提问来源于stack exchange,提问作者Gil Ong
相关产品推荐
相关产品推荐

