Robolectric和gms / maps

时间:2016-02-04 15:04:46

标签: android robolectric

更新

问题似乎是GooglePlayServices字节代码没有stackmap框架。不确定它是否重要但我使用的是JDK 8. 已经报告了使用GooglePlayServices的后备级别的解决方法,但是作为一种解决方法(至少现在)我添加了-noverify标志在Run-> editConfigurations下JUnit的默认VM选项,我的测试现在通过了。如果有人有,我仍在寻找更清洁的解决方案。

我试图在更新一个有点旧的项目之后再次运行一些测试(当我上次使用它时,我使用的是android studio 1.0x,现在我使用的是1.5.1)。

我已迁移到Robolectric 3.0,但我遇到了一些使用gms / maps的测试问题。以下是我得到的堆栈跟踪示例:

java.lang.VerifyError: Expecting a stackmap frame at branch target 15
Exception Details:
  Location:
    com/google/android/gms/maps/model/LatLng.writeToParcel(Landroid/os/Parcel;I)V @3: ifeq
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0000000: b800 1b99 000c 2a2b 1cb8 001f a700 092a
    0000010: 2b1c b800 1eb1                         

    at com.gmail.npnster.ourlatitude.MapMarker.getLatLng(MapMarker.java:143)

我的build.gradle文件中有以下内容

testCompile 'org.robolectric:robolectric:3.0'
testCompile 'org.robolectric:shadows-maps:3.0'
testCompile 'org.robolectric:shadows-play-services:3.0'

测试类有以下注释:

@Config(constants = BuildConfig.class, shadows = {ShadowGooglePlayServicesUtil.class} )
@RunWith(RobolectricGradleTestRunner.class)

并且发生故障的行是下面方法中的return语句

public LatLng getLatLng() {
    return new LatLng(mMarker.getLatitude(), mMarker.getLongitude());
}

当我使用Robolectric 2.4时,这已经工作了一段时间,但我不确定这是否是我如何设置Robolectric的问题,或者我是否还有其他问题。应用程序本身似乎运行良好。

0 个答案:

没有答案