本人在刚开始学习这个框架的时候遇到了一些坑,通过各种网上查找资料后,最终解决了一些问题,记录一下:

java.lang.VerifyError: Expecting a stackmap frame at branch target 9

java.lang.VerifyError: Expecting a stackmap frame at branch target 9
Exception Details:Location:com/meizu/cloud/pushsdk/MzPushMessageReceiver.onReceive(Landroid/content/Context;Landroid/content/Intent;)V @0: aload_0Reason:Expected stackmap frame at this location.Bytecode:0x0000000: 2a2b 2cb7 0019 a700 444e 1203 bb00 0f590x0000010: b700 1c12 02b6 001d 2db6 001b b600 1db60x0000020: 001e b800 122b 2bb6 0010 0101 1201 bb000x0000030: 0f59 b700 1c12 04b6 001d 2db6 001b b6000x0000040: 1db6 001e 110b b8b8 001a b1            Exception Handler Table:bci [0, 6] => handler: 9at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at org.robolectric.internal.Shadow.newInstanceOf(Shadow.java:15)at org.robolectric.shadows.ShadowApplication.registerBroadcastReceivers(ShadowApplication.java:148)at org.robolectric.shadows.ShadowApplication.bind(ShadowApplication.java:137)at org.robolectric.shadows.CoreShadowsAdapter.bind(CoreShadowsAdapter.java:99)at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:121)at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:433)at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:240)at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188)at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
复制代码

这是jvm的编译问题,我们需要设置-noverify参数,在AndroidStudio中,Go to Run -> Edit Configurations -> Configuration Tab

android.content.res.Resources$NotFoundException: unknown resource 2130837589

at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:351)at org.robolectric.shadows.ShadowAssetManager.getResourceValue(ShadowAssetManager.java:102)at android.content.res.AssetManager.getResourceValue(AssetManager.java)at android.content.res.Resources.getValue(Resources.java:1229)at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:328)at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193)at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:186)at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:753)at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191)at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:85)at android.support.v7.app.AppCompatDelegateImplBase.__constructor__(AppCompatDelegateImplBase.java:128)at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java)at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java)at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java)at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202)at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:70)at com.sunland.core.ui.base.BaseActivity.onCreate(BaseActivity.java:46)at com.sunland.ehr.attendance.clockin.ClockInActivity.onCreate(ClockInActivity.java:204)at android.app.Activity.performCreate(Activity.java:5933)at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195)at org.robolectric.util.ActivityController$1.run(ActivityController.java:122)at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:304)at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:45)at org.robolectric.util.ActivityController.create(ActivityController.java:118)at org.robolectric.util.ActivityController.create(ActivityController.java:129)at org.robolectric.util.ActivityController.setup(ActivityController.java:210)at org.robolectric.Robolectric.setupActivity(Robolectric.java:46)at ClockInActivityTest.setUp(ClockInActivityTest.java:28)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:251)at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188)at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
复制代码

这个问题坑比较大,在网上找到的各种解决办法都没有生效,反正是资源文件和AndroidManifest文件找不到引起的,之前以为由于是组件化引起的资源找不到的问题,事实上不是这样的。我们在test类里面引用的是RobolectricTestRunner,例如@RunWith(RobolectricTestRunner.class),实际上有个专门用于编译资源的类,RobolectricGradleTestRunner,该类的说明

/*** Test runner customized for running unit tests either through the Gradle CLI or* Android Studio. The runner uses the build type and build flavor to compute the* resource, asset, and AndroidManifest paths.** This test runner requires that you set the 'constants' field on the @Config* annotation (or the org.robolectric.Config.properties file) for your tests.*/
public class RobolectricGradleTestRunner extends RobolectricTestRunner {private static final String BUILD_OUTPUT = "build/intermediates";public RobolectricGradleTestRunner(Class<?> klass) throws InitializationError {super(klass);
复制代码

我们只要在Test类上替换一下注解就可以解决这个问题;

Caused by: java.lang.RuntimeException: MultiDex installation failed (/Users/wangchao/code/staffapp/app/. (Is a directory)).

Caused by: java.lang.RuntimeException: MultiDex installation failed (/Users/wangchao/code/staffapp/app/. (Is a directory)).at android.support.multidex.MultiDex.install(MultiDex.java:121)at com.sunland.core.ui.base.BaseApplication.attachBaseContext(BaseApplication.java:70)at android.app.Application.attach(Application.java:181)at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195)at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:131)at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:433)at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:240)at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188)at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)... 1 more
复制代码
这里只要添加 multi-dex shadow dependency:
复制代码
testImplementation "org.robolectric:multidex:3.4.2"
复制代码

Robolectric > 3.4 使用

testImplementation "org.robolectric:shadows-multidex:4.0.1"
复制代码

转载于:https://juejin.im/post/5c7515c56fb9a049f362c0f2

单元测试框架之Robolectric踩坑相关推荐

  1. go单元测试踩坑记录

    Go踩坑记录 1. go单元测试 测试文件名字必须是xxx_test后缀 测试函数必须是Test开头(否则报错,no test to run) 1.1 gomock单元测试 gomock对接口进行打桩 ...

  2. dubbo 单元测试_技术分享——一路踩坑构建Dubbo源码

    源码环境 随着目前对技术栈的求知欲,也开始入手Dubbo源码啦!!! 构建源码第一步: 必备开发环境:Java 1.5 以上的版本:Maven 2.2.1 或者以上的版本: 官网下载源代码 官网构建文 ...

  3. Mint-UI框架router-link返回上一页的方法 - 踩坑篇

    使用mint-ui框架的header导航组件,<router-link to="">如何实现点击返回上一页? 代码如下: <template><!-- ...

  4. Mac安装Drozer apk安全测试框架踩坑记录, ‘openssl/opensslv.h‘ file not found 和implicit declaration of function‘xx‘

    一. 环境准备 查看Drozer项目说明发现环境要求 大致就是: jdk1.7+ python2.7和pip 2不支持python3和pip3 Protobuf 2.6 + Pyopenssl 16. ...

  5. HD框架踩坑总结---第1篇

    HD框架踩坑之路---第1篇 页面标签详解 1. 循环遍历标签 2. 文本输出标签 3. 日期格式处理标签 4. 码本查询标签(查询码本回显对应的内容) 5. 判断标签(根据判断条件决定要显示的内容) ...

  6. 一次Delta lake 0.8.0 踩坑有感:使用新框架的新版本,一定要尽早关注多多关注社区动态...

    点击上方蓝色"明哥的IT随笔",关注并选择"设为星标",keep striving! 一.数据胡三剑客介绍 关注大数据发展动态的朋友,都知道最近几年数据湖存储引 ...

  7. abp angular 和mvc_ABP+Angular框架搭建踩坑记

    最近用angular和.net core 搭建一个前后端分离的BS框架,准备使用ABP模板实现. 因为准备前端代码也在VS2019里面写,所以此处勾上了One solution ...即前后端都放在一 ...

  8. SpringSecurity安全框架学习心得,避免踩坑。

    最近有一个项目需要用到SpringSecurity安全框架,特意简单学习了一下,中间也踩了很多坑,在这里记录一下避免以后踩坑. 1.引入: 在很多的项目中,都会遇到认证问题,就是管理员与用户等不同角色 ...

  9. Spock单元测试踩坑

    1.where块使用@Shared变量踩坑 场景描述 where块中使用了@Shared变量,变量在setup()中初始化 debug时发现图中位置1的createParam.vin与位置2中的cre ...

最新文章

  1. 尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)
  2. linux kernel rcu 读复制更新 并发控制机制 简介
  3. java可以返回微妙吗_Java开发中10个最为微妙的最佳编程实践
  4. 1.4编程基础之逻辑表达式与条件分支 17 判断闰年
  5. Linux线程的同步,linux线程同步
  6. 数据:以太坊Gas价格较月初下降45%
  7. Python中的@classmethod修饰符
  8. 用python写用手机发邮件_如何用python写发邮件?
  9. cad画流程图的插件_如何用cad画交互流程图
  10. ProgressBar进度条使用注解
  11. Cognos报表的开发
  12. 6U VPX 电源产品学习资料第411篇:基于6U VPX的700W/1400W 电源产品
  13. 计算机及数码产品营销课后题,职业教育课程改革创新系列教材:计算机及数码产品营销...
  14. 狼羽:视频营销是今年营销增长渠道重中之重
  15. 计算机网络有哪三种地址,IP地址的分类有哪几种
  16. 对于网络文学而言 计算机叙事,90年代文学的“增量”
  17. PQ分区魔术师图解教程
  18. ubuntu下安裝搜狗輸入法
  19. 用上周的作业:画一个太阳、地球、月亮的运动模型来剖析OpenGL中变换乃至整个绘制的秘密
  20. 高并发高可用高可靠性的千人千面项目技术架构分析

热门文章

  1. download在线下载源码
  2. java游戏西门大官人_valueOf()方法的使用
  3. centos7 安装java 8_centos7 在linux系统进行安装jdk1.8过程
  4. 前端开发框架_2019年应该如何学习前端开发?
  5. 梨花带雨播放器程序开源版本
  6. Softaken Unlock PDF Files v1.0 PDF文件解密
  7. layui修改table中的按钮_layui数据表格中如何设置按钮切换(是否置顶)与分页居中...
  8. 小程序影视APP/追剧吧/脱离微擎/可用火车头采集小程序影视
  9. MooTools教程(5):事件处理
  10. 零基础 Amazon Web Services (AWS) 入门教程图文版(四)