当前位置: 首页 > 知识库问答 >
问题:

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

毕霖
2023-03-14

我的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'
}
}

当属性测试“已启用”设置为 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应用程序生成代码覆盖率指标?

共有3个答案

戴化
2023-03-14

您需要针对Java1.5版本进行编译。

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_5
    targetCompatibility JavaVersion.VERSION_1_5
}
莘睿
2023-03-14

自0.10.0以来,Jacoco覆盖率支持已添加到gradle插件中。请参阅http://tools.android.com/tech-docs/new-build-system.

我不太明白为什么你有这么复杂的gradle文件。

冷吉星
2023-03-14

以下链接在解释我遇到的问题时非常有用:http://www.androidpuzzles.com/168_17620080/

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

如果我必须保留 Java 1.7 设置,解决方法是将所测试类中私有方法的作用域更改为受保护或公共作用域。然后,这将允许我生成代码覆盖率报告(克服所包含的链接中确定的问题)。

 类似资料:
  • 我正在尝试使用JaCoCo-javaagent传递VM参数来获得代码覆盖率 -Java agent:/test/jaco co/jaco agent . jar = dest file =/test/jaco co/jaco co . exec,includes=com。*,append=true 我能在jacoco中获得一些价值。执行文件,但无法获取覆盖率报告。我怎样才能把jacoco转化成。执

  • 我正在尝试生成Jacoco代码覆盖率报告。我已经将AndroidTestCase用于我的测试类。 在过去几天里,我已经关注了堆栈溢出的各种公认答案。结果是否定的。 我的分级文件:

  • 代码覆盖率在仪表板上显示为 0% build.gradle文件 运行此命令 JacocoTestReport使用正确的代码覆盖率生成 声纳曲渐变任务生成此日志 在谷歌上搜索了半天,这个问题的唯一真正解决方案是:财产的sonar.jacoco。不推荐使用“报告路径”。请使用“声纳”jacoco。改为“报告路径” 此处的答案解释了双重输出: 但是,这似乎尚未添加到gradle插件中,因为正在使用的插件

  • 我试图找到这个答案,但几乎找不到。我正在进行API测试,在此过程中,我需要从本地计算机调用其余的API。本地机器包含maven项目和调用相应rest API的框架。 我需要检查远程Rest API的代码覆盖率,并根据代码覆盖率形成报告。请帮忙,怎么做? 注意:我发现这个链接很有用,但是它没有详细说明该怎么做? http://eclemma.org/jacoco/trunk/doc/agent.ht

  • 我的代码运行在具有单独JVM的单独虚拟机上。我想在此虚拟机上以tcpserver模式设置JaCoCo代理以收集覆盖率数据。然后,我将在我的maven项目中以tcpclient模式设置JaCoCo代理,以连接到上面提到的VM并获取覆盖率数据。 问题是代理不收集任何覆盖数据。在中创建了覆盖率数据文件,但该文件为空。 下面是代理选项:-Java agent:/usr/xx/plugins/org . j

  • 我在声纳中的代码覆盖率显示为0%,这不是真的,因为我有单元测试。 格拉德尔 当我打开inside然后我可以看到成功的单元测试。 我在Jenkins环境中运行作为