全面使用Robolectric时Tealium导致单元测试崩溃问题
解决Robolectric+Tealium导致的VerifyError测试崩溃问题
我之前在项目里也碰到过一模一样的问题——没调用Tealium方法时单元测试跑的好好的,一全量用Robolectric就集体崩溃,还用到了ShadowApplication,报的就是java.lang.VerifyError: Expecting a stackmap frame at branch target 50这个错误。给你几个亲测有效的解决思路:
关闭字节码验证绕过错误
直接在JVM启动参数里添加-noverify,跳过字节码的栈映射帧验证。可以两种方式配置:- 在单个测试类上添加注解:
@Config(jvmArgs = "-noverify") public class YourTestClass { // 测试代码 } - 在gradle全局配置所有单元测试:
testOptions { unitTests { all { jvmArgs '-noverify' } } }
- 在单个测试类上添加注解:
排除Tealium中冲突的模块
Tealium的部分模块(比如native相关、字节码增强类模块)容易和Robolectric的类加载逻辑冲突,你可以在测试依赖里排除这些不必要的模块:testImplementation('com.tealium:library:x.x.x') { // 根据实际冲突的模块调整,比如排除Tealium的字节码增强组件 exclude group: 'com.tealium', module: 'tealium-core' }升级Robolectric到新版本
这个错误是Robolectric旧版本的已知兼容性问题,官方在后续版本(比如4.0及以上)修复了不少类加载和字节码处理的bug,升级后大概率能直接解决问题。
问题根源
这个错误本质是Robolectric模拟Android环境时的字节码修改逻辑,和Tealium的字节码增强(或其依赖库的字节码操作)冲突,导致JVM验证字节码时发现栈映射帧不符合预期,从而抛出VerifyError。
内容的提问来源于stack exchange,提问作者TeeTracker
相关产品推荐
相关产品推荐

