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

试图在子模块上设置Jacoco检查代码覆盖

干旺
2023-03-14

我的应用程序中有一些子模块。有些我希望有代码覆盖率规则,有些我希望完全免除。

我的项目的根POM继承自父POM,该POM已将JaCoCo配置为:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>${jacoco-maven-plugin.version}</version>
    <configuration>
        <fileSets>
            <fileSet>
                <directory>domain/target</directory>
                <includes>
                    <include>*.exec</include>
                </includes>
            </fileSet>
            <fileSet>
                <directory>integration/target</directory>
                <includes>
                    <include>*.exec</include>
                </includes>
            </fileSet>
        </fileSets>
        <destFile>target/jacoco.exec</destFile>
    </configuration>
</plugin>

在一个子模块test中,我希望有50%的代码覆盖率,我已将JaCoCo配置为:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <excludes>
                    <exclude>**/*</exclude>
                </excludes>
            </configuration>
        </execution>
        <execution>
            <id>jacoco-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule>
                        <element>PACKAGE</element>
                        <limits>
                            <limit>
                                <counter>LINE</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.5</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

此模块的代码覆盖率绝对为零,但运行mvn clean verify不会产生任何错误。

我想也许我必须在根POM中定义它,所以我这样做:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule>
                        <element>PACKAGE</element>
                        <limits>
                            <limit>
                                <counter>LINE</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.75</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

mvn clean verify是否产生错误:

[警告]违反了包com的规则。项目:线路覆盖率为0.00,但预计最小值为0.75

问题是,我希望我的其他子模块的总括值为0.75,但对于这个模块,test我希望值为0.5。我找到了这个描述继承和combine.self="overover"的链接。所以我将其添加到test中的配置选项中:

<execution>
    <id>jacoco-check</id>
    <goals>
        <goal>check</goal>
    </goals>
    <configuration combine.self="override">
        <rules>
            <rule>
                <element>PACKAGE</element>
                <limits>
                    <limit>
                        <counter>LINE</counter>
                        <value>COVEREDRATIO</value>
                        <minimum>0.5</minimum>
                    </limit>
                </limits>
            </rule>
        </rules>
    </configuration>
</execution>

尽管有这种覆盖,但我仍然收到一个错误,当我想要0.5时,它期望值为0.75:

[警告]违反了包com的规则。项目:线路覆盖率为0.00,但预计最小值为0.75

如何在子模块中重写此选项?

共有1个答案

唐照
2023-03-14

我的解决方案是使用

根POM:

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

我希望0代码覆盖率的子模块POM:

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>test</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule>
                                    <element>BUNDLE</element>
                                    <limits>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

 类似资料:
  • 我有一个多模块项目和一个家长pom。xml及其两个模块。项目jar和项目。战争所有测试用例都在项目中。罐子当我运行mvn声纳时。母舰pom上的声纳目标,jacoco。未生成exec,代码覆盖率为空。我在父pom中具有以下属性。 请帮忙。我使用的是Sonarqube 4.2。

  • 问题内容: 我最近在eclipse中使用了EclEmma插件来查找我的应用程序中JUnits的代码覆盖范围,并且效果很好。 在下一步中,我希望能够找到端到端测试/功能测试的代码覆盖范围,这些代码在外部从我们的应用程序中调用(它们驻留在单独的服务器上)。 基本上,我们将应用程序打包为jar(我们使用maven)并将其部署在服务器上。我们可以在此位置触发功能测试。 在这种情况下,有没有办法找到代码覆盖

  • 我有一个类似这样的项目结构: -应用 --模块 2 //库模块 --模块3 //库模块 我正在为我的多模块Android项目编写仪器测试用例,其中包含jaco代码覆盖范围。如果我从“app”模块执行检测测试用例,则仅为“app”模块类生成代码覆盖率。 因此,为了获得“模块2”的代码覆盖率 当我在非应用程序模块中执行插装测试用例,无法启动主活动,插装期间应用程序未启动,测试用例失败时,会出现问题。

  • 我的代码结构如下: 事件 消息 其他代码 功能测试 在jacoco的构建脚本中,首先它必须复制所有类并使用该类目录来运行该工具。您能描述一下在这里编写目标目录的步骤吗。我的意思是,我应该如何提及运行代码覆盖的目录。 构建时,每个文件夹都有自己的目标文件夹,其中包含类。 以下是步骤: 在詹金斯将项目作为工作进行构建 将其部署到用户阶段 在詹金斯中运行雅各布报告作业 雅高报告工作说明: > 构建步骤-

  • 我有一个基本的maven多模块,父模块是POM,其子模块是domain、service和Web。 我已经在pom父级中添加了jacoco插件和所需的配置,以便将测试覆盖率报告附加到一个Sonar很容易找到的文件中。 我的问题是,Sonar只显示第一个模块的测试覆盖范围(是domain)(即使我用编辑器打开文件,看到其他模块的类名被追加在其中)。 这种配置会有什么问题? 为了它的价值,声纳分析被称为

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