使用testCoverageEnabled = true运行Android测试时的java.lang.VerifyError

时间:2014-05-01 06:26:50

标签: android gradle jacoco

我最近尝试过针对Android Gradle插件的新Jacoco代码覆盖功能,不幸的是它使我的测试失败并出现以下错误:

 java.lang.VerifyError: com/foo/bar/rest/SomeClass at
 com.foo.bar.test.rest.BaseTest.setUp(BaseTest.java:87) at
 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) at
 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) at
 android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
 at
 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)

我在build.gradle中使用这些行启用了代码覆盖:

 buildTypes {

         debug {
             testCoverageEnabled = true
         } 
...

有没有人遇到同样的问题?

3 个答案:

答案 0 :(得分:4)

将@ ben75的评论转换为答案:corresponding bug已修复为build-tools 21.0.0。但是,该版本引入了另一个Windows-specific bug,因此您应该使用build-tools 21.0.2(即使该版本尚未显示在revisions page上)。

答案 1 :(得分:1)

我遇到了同样的问题,但找到了这个解决方案: 将-noverify添加到您的gradle文件中,如下所示:

testOptions {
    unitTests {
        all {
            // configure the test JVM arguments
            jvmArgs '-noverify'
        }
    }
}

来源:https://github.com/robolectric/robolectric-gradle-plugin/issues/144

答案 2 :(得分:-2)

在编译和运行时使用的库之间存在不一致的情况下,您将收到java.lang.VerifyError

这是列出类似问题的另一个主题:Java.lang.verifyerror how do I fix or even find out the root cause?