标签: jacoco

Gradle Jacoco 报告覆盖率与验证百分比不匹配

我们配置了排除:

def coverageExcludes() {
    return [
        "com/ourcompany/*Config*",
        "com/ourcompany/ServiceApplication*",
        "com/ourcompany/Shutdown*",
        "com/ourcompany/ShutdownConnector*",
        "com/ourcompany/Tomcat*",
        "com/ourcompany/TomcatCustomConnectorCustomizer*",
        "com/ourcompany/endpoint/exception/**",
        "com/ourcompany/endpoint/util/ObjectMapperBuilder*",
        "com/ourcompany/framework/**",
        "com/ourcompany/helper/ApiHelper*",
        "com/ourcompany/helper/OffsetDateTimeDeserializer*",
        "com/ourcompany/persistence/entity/**",
        "com/ourcompany/persistence/exception/**",
        "com/ourcompany/service/exception/ServiceException*",
        "com/ourcompany/service/model/**",
        "com/ourcompany/v2/**",
        "com/ourcompany/v3/**"
    ]
}
Run Code Online (Sandbox Code Playgroud)

将它们用于jacocoTestReport

jacocoTestReport {
    reports {
        xml {
            enabled true
        }
        html {
            enabled true
        }
    }
    getExecutionData().setFrom(fileTree(buildDir).include("/jacoco/*.exec"));
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it,
                exclude: coverageExcludes()
            )
        }))
        for (Object c : classDirectories) {
            System.out.println(c);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且排除工作:

在此输入图像描述

然后我们尝试在验证任务中使用相同的排除,并将覆盖率失败阈值设置为 0.87,因为这就是覆盖率报告中显示的内容:

jacocoTestCoverageVerification {
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it,
                exclude: coverageExcludes()
            )
        }))
        for …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco

3
推荐指数
1
解决办法
1880
查看次数

JaCoCo Gradle Kotlin DSL 从违规规则中排除文件

我正在尝试将我的项目设置为运行 JaCoCo,如果测试覆盖率低于 80%,则构建失败。需要注意的是,我想排除一个特定的文件,但我似乎无法做到这一点。我已经在网络上搜索并阅读了大量的 Stack Overflow 答案、博客文章和插件文档,但我无法让任何东西发挥作用。它始终仍然包含我试图排除的文件。

我开始于:

tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,这将包括一切,而且确实如此。根据我所读到的内容,我尝试了以下变体,但没有一个起作用:

tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
                exclude("path.to.my.class.HelloWorld")
            })
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
tasks.jacocoTestCoverageVerification {
    classDirectories.setFrom(
            sourceSets.main.get().output.asFileTree.matching {
                exclude("path.to.my.class.HelloWorld")
            }
    )
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
tasks { …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco gradle-plugin gradle-kotlin-dsl

3
推荐指数
1
解决办法
3842
查看次数

JaCoCo gradle 插件忽略版本

摇篮版本:6.1.1

Android Gradle 插件:4.0.0

当尝试运行我的 jacoco 覆盖范围时,它似乎没有考虑版本。当我查看 HTML 报告时,它显示“使用 JaCoCo 0.7.9.201702052155 创建”,尽管我已经进行了toolVersion = "0.8.5"设置。该报告也没有修复我期望在 0.8.3 中与 Kotlin 相关的问题,作为二次确认,这不起作用。

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.8.5"
    reportsDir = file("$buildDir/reports")
}

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

project.afterEvaluate {
    (android.hasProperty('applicationVariants')
            ? android.'applicationVariants'
            : android.'libraryVariants').all { variant ->
        def variantName = variant.name
        def unitTestTask = "test${variantName.capitalize()}UnitTest"
        def uiTestCoverageTask = "create${variantName.capitalize()}CoverageReport"

        tasks.create(name: "${unitTestTask}Coverage", type: JacocoReport, dependsOn: [
                "$unitTestTask",
                "$uiTestCoverageTask"
        ]) {
            group = "Reporting"
            description = "Generate Jacoco …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco android-gradle-plugin jacoco-plugin

3
推荐指数
1
解决办法
2808
查看次数

为什么 Jacoco 分支机构覆盖报告说 if (a && b && c) 实际上是 6 个分支机构?

我的公司要求新代码的测试覆盖率达到 90%,对于 Java 代码,我使用 gradle jacoco 插件,这很好;然而,当分支数量开始呈指数增长(夸张一点,可能是几何增长)时,分支覆盖率很难提高到90%。

这是一个非常人为的例子:

public class Application {
    public static void test(boolean a, boolean b) {
        if (a && b) {
            System.out.println("true!");
        } else {
            System.out.println("false!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和测试:

public class ApplicationTests {
    @Test
    public void test() {
        Application.test(true, true);
        Application.test(false, false);
    }
}
Run Code Online (Sandbox Code Playgroud)

覆盖率报告如下所示:

测试报告截图

它还说我错过了 4 个分支中的 1 个,或者换句话说,我已经覆盖了 4 个分支中的 3 个(分支覆盖率为 75%)。

如果我在这里增加布尔值的数量,看起来分支的数量是 n*2,其中 n 是布尔值的数量。因此 3 (a,b,c) 变为 6 个分支,10 变为 20 个分支。所以我想我不明白在这种情况下有 6 个或 20 个分支意味着什么。

为了满足这个问题 - 我可以

A) …

java code-coverage jacoco

3
推荐指数
1
解决办法
8428
查看次数

如何获得Java代码覆盖率的全面覆盖?Junit 测试用例

我正在做一门课程的作业,我需要全面了解这种方法

使用 JaCoco 的 Eclipse 中的代码覆盖率图像

这些是属性和构造函数,它是咖啡机的程序,这是 Recipe 类

public class Recipe {
private String name;
private int price;
private int amtCoffee;
private int amtMilk;
private int amtSugar;
private int amtChocolate;

/**
 * Creates a default recipe for the coffee maker.
 */
public Recipe() {
    this.name = "";
    this.price = 0;
    this.amtCoffee = 0;
    this.amtMilk = 0;
    this.amtSugar = 0;
    this.amtChocolate = 0;
}
Run Code Online (Sandbox Code Playgroud)

我用过

    /*
 * setPrice test
 */
@Test
public void testSetPrice_1() throws RecipeException {
    r1.setPrice("25");
    r1.setPrice("0");
}

/*
 * setPrice test
 */ …
Run Code Online (Sandbox Code Playgroud)

java junit jacoco

3
推荐指数
1
解决办法
2624
查看次数

如何在jacoco:report之后禁用jacoco-agent?

我有一个maven项目,使用"test"-phase以及"integration-test"-phase.在测试阶段,执行JUnit-Tests,在集成测试中有HTMLUnit-tests.我正在使用Jacoco [1] -maven-plugin来测量我的项目的JUnit测试所完成的代码覆盖.在进行集成测试时,我使用maven-embedded-glassfish-plugin启动glassfish服务器并在执行测试之前部署我的应用程序.

可悲但真实,我必须暂时禁用jacoco,因为它与"集成测试"相位不一致.

Jacoco的报告目标是/应该在准备包阶段进行,所以我认为它不应该影响集成测试阶段.但是当我启用jacoco:report时,由于内存大小问题,我的集成测试不再运行[2].

如何停止jacoco:报告影响集成测试阶段?


[1] http://www.eclemma.org/jacoco/

[2]

java.lang.instrument.IllegalClassFormatException: Error while instrumenting class com/steadystate/css/parser/SACParserCSS21TokenManager.
        at org.jacoco.agent.rt_6l8m50.CoverageTransformer.transform(CoverageTransformer.java:91)
        at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
        at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:424)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at com.steadystate.css.parser.SACParserCSS21.<init>(SACParserCSS21.java:2196)
        at com.steadystate.css.parser.SACParserCSS21.<init>(SACParserCSS21.java:23)
        at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleSheet.parseCSS(CSSStyleSheet.java:530)
        at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleSheet.<init>(CSSStyleSheet.java:152)
        at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLStyleElement.getSheet(HTMLStyleElement.java:73)
        at com.gargoylesoftware.htmlunit.javascript.host.css.StyleSheetList.item(StyleSheetList.java:129)
        at com.gargoylesoftware.htmlunit.javascript.host.Window.getComputedStyle(Window.java:1591)
        at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement.getCurrentStyle(HTMLElement.java:2465)
        at com.gargoylesoftware.htmlunit.html.DomNode.isDisplayed(DomNode.java:688)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.isVisible(HtmlSerializer.java:377)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.appendText(HtmlSerializer.java:371)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.appendNode(HtmlSerializer.java:126)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.appendChildren(HtmlSerializer.java:249)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.appendNode(HtmlSerializer.java:198)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.appendChildren(HtmlSerializer.java:249)
        at com.gargoylesoftware.htmlunit.html.HtmlSerializer.appendNode(HtmlSerializer.java:198)
        at …
Run Code Online (Sandbox Code Playgroud)

integration-testing maven jacoco

2
推荐指数
1
解决办法
8628
查看次数

Jacoco代理在远程机器上进行集成测试

我正在使用maven和jacoco-maven-plugin进行测试覆盖率报告

我需要将jacoco-agent配置为远程计算机(Linux),我正在运行运行集成测试的脚本

我怎么做到的?

这是我试过的:

                    <execution>
                        <id>prepare-agent-integration</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>prepare-agent-integration</goal>
                        </goals>
                        <configuration>
                            <destFile>${sonar.jacoco.itReportPath}</destFile>
                            <jacoco.address>172.X.X.X</jacoco.address><!-- This is the machine where integration tests runs-->
                            <jacoco.port>22</jacoco.port>
                        </configuration>
                    </execution>

                    <execution>
                        <id>report-integration</id>
                        <goals>
                            <goal>report-integration</goal>
                        </goals>
                        <configuration>
                            <dataFile>${sonar.jacoco.itReportPath}</dataFile>
                            <outputDirectory>${project.basedir}/target/site/jacoco-it</outputDirectory>
                        </configuration>
                    </execution>
Run Code Online (Sandbox Code Playgroud)

code-coverage maven-3 maven jacoco jacoco-maven-plugin

2
推荐指数
1
解决办法
3002
查看次数

Jacoco报道了声纳 - 跑步者找不到的路径

我使用EclEmma生成了一个覆盖率报告,其中包含以下路径:

C:/tmp/coverageReport/report.exec
Run Code Online (Sandbox Code Playgroud)

此文件存在,不为空且可读.关于代码覆盖的我的sonnar-runner配置定义如下:

sonar.java.coveragePlugin=jacoco
sonar.junit.reportsPath=C:/tmp/coverageReport/report.exec
Run Code Online (Sandbox Code Playgroud)

分析成功完成,但单元测试覆盖率小部件中没有可见数据.

此外,我在分析过程中得到以下几行:

18:23:45.036 INFO  - parsing C:/tmp/coverageReport/report.exec
18:23:45.037 WARN  - Reports path not found: C:/tmp/coverageReport/report.exec
Run Code Online (Sandbox Code Playgroud)

关于我缺少的任何想法?

jacoco sonar-runner sonarqube

2
推荐指数
1
解决办法
2万
查看次数

如何将JaCoCo Gradle插件与TestNG和JUnit一起使用?

我正在开发一个项目,我们正在使用TestNG和JUnit进行测试.

不幸的是,在编写TestNG测试时,他们不会在JaCoCo Coverage报告中考虑.

我写了一个testng.gradle文件,我将其包含在每个build.gradle文件中(这是一个多模块项目):

task testNG(type: Test) { useTestNG() }
test.dependsOn testNG
Run Code Online (Sandbox Code Playgroud)

JUnit和TestNG测试都以这种方式工作.

如果我写testng.gradle这样的话:

test {
    useTestNG()
}
Run Code Online (Sandbox Code Playgroud)

JaCoCo工作正常,但显然只有TestNG测试才能执行.

我该如何解决?这是Gradle的JaCoCo插件中的错误吗?

junit testng gradle multi-module jacoco

2
推荐指数
1
解决办法
2338
查看次数

jacoco:不能排除类

我有一个maven项目,我想jacoco用于代码覆盖.这是我的pom的相关部分

          <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.5.201505241946</version>
                <executions>
                    <execution>
                        <id>pre-my-test</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <append>true</append>
                            <destFile>${project.build.directory}/jacoco-it.exec</destFile>
                            <propertyName>failsafeArgLine</propertyName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>post-my-test</id>
                        <phase>post-my-test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${project.build.directory}/jacoco-it.exec</dataFile>
                            <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

所以我能够很好地运行我的测试,并且还可以很好地构建项目.然后我跑了

mvn clean verify org.jacoco:jacoco-maven-plugin:prepare-agent
Run Code Online (Sandbox Code Playgroud)

我不断收到错误

ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.7.5.201505241946:
report (post-my-test) on project my-project: 
An error has occurred in JaCoCo Test report generation. 
Error while creating report: 
Error while analyzing class /path/tp/my/project/target/classes/META-INF/
bundled-dependencies/some-third-party-1-jar-with-dependencies.jar@org/slf4j/event/
EventConstants.class. Can't add different class with same name: 
org/slf4j/event/EventConstants -> [Help …
Run Code Online (Sandbox Code Playgroud)

java code-coverage maven jacoco jacoco-maven-plugin

2
推荐指数
1
解决办法
1824
查看次数