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

Sonar Jacoco在覆盖范围内未考虑Kotlin androidTest(集成测试用例)

充昌勋
2023-03-14

我为我的android项目编写了本地和集成测试案例。使用静态编程语言(1.4.21)Robolectric(4.5.1),声纳(2.7.1),Jacoco(maven插件0.8.2)

问题是SonarJacoco没有考虑androidTest(集成测试用例)在Kotlin中编写的代码覆盖率,但是Sonar显示了其他测试用例的正确覆盖率,如-

java单元测试用例-

koltin单元测试用例-

java集成测试用例-

Kotlin集成测试案例-

虽然我已经检查了声纳的路径,而且都是正确的。

properties['sonar.java.binaries'] = files("${buildDir}/intermediates/javac/universalDebug/classes")
properties["sonar.java.binaries"] += files("${buildDir}/tmp/kotlin-classes/universalDebug/")

properties['sonar.java.test.binaries'] = files("${buildDir}/intermediates/javac/universalDebugAndroidTest/classes")
properties['sonar.java.test.binaries'] += files("${buildDir}/tmp/kotlin-classes/universalDebugAndroidTest/")

我已经看过其他的stackoverflow问题,但没有发现同样的问题。所以,我无法找出为什么sonar没有覆盖我用Kotlin编写的集成测试用例的问题。

提前谢谢

更新

在adroidTest文件夹中

MyApplicationTest> src> com > pkgA
                            > pkgB

它正在考虑pkgA中存在的测试文件,而不是其他文件。我最近创建了这个pkgB这可能是什么原因?我是否更新了某个路径?

共有1个答案

朱越
2023-03-14

您可能需要执行以下操作

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

请注意,Java 11存在一些可能会导致测试失败的问题,因此您可能还希望排除jdk。内部如下

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
    excludes = ['jdk.internal.*']
}

或者是一个有点冗长的选项,但可以:

subprojects {
    pluginManager.withPlugin("com.android.library"){
        android.testOptions.unitTests.all {
            jacoco {
                includeNoLocationClasses = true
                excludes = ['jdk.internal.*']
            }
        }
    }
    pluginManager.withPlugin("com.android.application"){
        android.testOptions.unitTests.all {
            jacoco {
                includeNoLocationClasses = true
                excludes = ['jdk.internal.*']
            }
        }
    }
    apply plugin: 'jacoco'
}

如果可能的话,我建议你也升级你的jacoco和sonar插件版本

 类似资料:
  • 我正在运行我的selenium项目模块,它不是主项目的一部分,我用Jacoco maven插件和surefire插件运行selenium测试,Jacoco只给出了selenium项目的代码覆盖(exec文件),而不是整个项目...我需要如何配置我的Jacoco和Surefire以获得外部/整个项目覆盖??

  • 假设在下面的Maven项目结构中有和。 在IntelliJ IDEA中,有一个名为包和类的选项,可以将用于缩小代码覆盖率范围的数据包含在覆盖率中。 我想知道,例如,如果我想查看的覆盖率,我应该向本节添加哪些包?我认为,当我编写这个单元测试仅用于测试时,可以只将或其包添加到要包括在覆盖率数据部分的包和类中。那是真的吗?或者什么是正确的方法?

  • 使用jacoco代理并获取测试覆盖率报告有大量答案。大多数答案都是一半,我有点困惑。 以下是我想做的:1。我的Java应用程序正在某个远程服务器上运行。说IP-192.168.17.7 我使用以下命令运行测试:mvn-Denv=stage-Dmaven。测验失败ignore=true-DsuiteFile=src/test/java/Smoke。xml测试 现在我如何通过使用Jacoco代理获得J

  • 问题内容: 我的软件包中有一个生成的文件,该文件位于顶部。我正在使用进行包裹测试。这将创建覆盖率配置文件并显示总覆盖率百分比。但是在计算覆盖率时,它还包括生成的文件。有没有一种方法可以在覆盖率计算中忽略生成的文件? 问题答案: 大多数Go工具都在软件包上运行,因为软件包本身形成了一个整体上可能有用的 单元 。从软件包中排除文件很容易“破坏”软件包:被排除的文件可能包含(关键的)软件包初始化代码,甚

  • 这与预期的一样工作,并且能够列出集成测试的覆盖率。 我们有一个SonarQube服务器运行在版本上,有人知道当使用代理时,该版本的SonarQube是否能够显示集成测试覆盖率吗?

  • 问题内容: 我试图用来衡量我正在构建的服务的测试覆盖率。这是一个REST API,我通过旋转,测试HTTP请求和查看HTTP响应来对其进行测试。这些测试不是服务包的一部分,并且返回0%的测试覆盖率。有没有办法获得实际的测试覆盖率?我希望在给定的端点上进行最理想的方案测试,至少可以覆盖特定端点处理程序的代码的30-50%,并且可以通过添加更多针对常见错误的测试来进一步改善此情况。 问题答案: 有人向