Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mockito库的android应用程序Jacoco代码覆盖率_Android_Mockito_Code Coverage_Jacoco - Fatal编程技术网

使用mockito库的android应用程序Jacoco代码覆盖率

使用mockito库的android应用程序Jacoco代码覆盖率,android,mockito,code-coverage,jacoco,Android,Mockito,Code Coverage,Jacoco,我的android应用程序使用以下配置: 格拉德尔-0.12+ build.gradle文件的内容 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' } } repositories { mavenLocal() mavenCentral() } apply plugin: 'com.android.

我的android应用程序使用以下配置:

  • 格拉德尔-0.12+
build.gradle文件的内容

buildscript {
repositories {
    mavenCentral()
}

dependencies {
    classpath 'com.android.tools.build:gradle:0.12.+'
}
}

repositories {
mavenLocal()
mavenCentral()
}

apply plugin: 'com.android.library'
apply plugin: "jacoco"



dependencies {

compile 'commons-collections:commons-collections:3.2.1'
compile 'org.slf4j:slf4j-android:1.6.1-RC1'

// dependency injection
compile('org.roboguice:roboguice:2.0') {
    exclude module: 'cglib'
    exclude module: 'aopalliance'
    exclude module: 'guice'
}

compile files('libs/guice-3.0-no_aop.jar')
compile 'javax.inject:javax.inject:1'



/*
 * Test dependencies.
 */
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0'

}

android {
buildToolsVersion "20.0"
compileSdkVersion 19

buildTypes {
    debug {
        runProguard false
        testCoverageEnabled true
    }
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

defaultConfig {
    minSdkVersion 8
    targetSdkVersion 19
    versionCode 100
    versionName "1.0.0"
}

/*
 * Workaround for packaging bug in Android Gradle plugin regarding duplicate files.
 */
packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'LICENSE.txt'
}
}
当属性testCoverageEnabled设置为false时,我的所有测试都会成功运行。将其设置为true时,运行测试时会引发以下异常

Caused by: java.lang.VerifyError: *** Some class ***
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:211)
at dalvik.system.DexPathList.findClass(DexPathList.java:313)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:51)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
当模拟在测试中初始化时,错误发生在线路上


是否有人能够为使用mockito库进行测试的android应用程序生成代码覆盖率指标?

自0.10.0以来,Jacoco覆盖率支持已添加到gradle插件中。看


我不太清楚您为什么有这么复杂的gradle文件。

以下链接在解释我遇到的问题时非常有用:

随后,我将源代码和目标代码的兼容性设置切换到Java1.5,我能够运行单元和UI测试(使用mockito和espresso),并使用Jacoco生成代码覆盖率报告


如果我必须保留Java1.7设置,那么解决方法就是将被测试类中私有方法的作用域更改为受保护或公共作用域。这将允许我生成代码覆盖率报告(克服包含在链接中的问题)。

您需要根据Java 1.5版本进行编译

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_5
    targetCompatibility JavaVersion.VERSION_1_5
}

此问题已在生成工具版本21中修复+

android {
buildToolsVersion "21.1.2"
compileSdkVersion 19

...
}

将构建工具升级到21+,以保持Java 1.7的兼容性。

gradle文件并不复杂。我唯一感兴趣的地方是应用jacoco插件,然后在调试构建类型中启用代码覆盖率。然而,jacoco的东西似乎与dexmaker mockito版本不太兼容,这就是我的问题所在。我不确定你是否需要应用jacoco插件。我得找个剧本看看我该怎么做。不过,有一些示例可能会有所帮助。忽略关于为jacoco应用插件的部分,一旦我启用代码覆盖率,我的测试(使用mockito)就会开始失败,这就是根本问题。。。