java - 具有单独测试模块的 Maven 多模块项目 - 代码覆盖率?

标签 java maven code-coverage jacoco-maven-plugin

我有一个 Maven 多模块项目。

root:
    moduleA/   # no unit tests
    moduleB/   # no unit tests
    moduleC/   # no unit tests
    tests/     # All unit tests, since depends on modules A, B and C

所有测试都在名为 tests/的单个模块中,所有代码都在单独的模块中。

有什么方法可以获得代码覆盖率?

最佳答案

有一种方法可以做到这一点。神奇的是创建一个组合的 jacoco.exec 文件并分两步完成。我的 pom:

<properties>
    ...
    <jacoco.overall.exec>${maven.multiModuleProjectDirectory}/target/jacoco_analysis/jacoco.exec</jacoco.overall.exec>
</properties>

<build>
    <pluginManagement>
        <plugins>

            ...

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.8</version>
                <configuration>
                    <destFile>${jacoco.overall.exec}</destFile>
                    <dataFile>${jacoco.overall.exec}</dataFile>
                </configuration>
            </plugin>

            ...

        </plugins>
    </pluginManagement>
</build>

<profiles>
    <profile>
        <id>runTestWithJacoco</id>
        <activation>
            <property>
                <name>runTestWithJacoco</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>default-prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <append>true</append>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>createJacocoReport</id>
        <activation>
            <property>
                <name>createJacocoReport</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>default-report</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

将此添加到您的父 pom 并执行 mvn clean install -DrunTestWithJacocomvn validate -DcreateJacocoReport。现在你已经完全覆盖了一个类,哪个测试覆盖它并不重要。神奇之处在于使用 maven.multiModuleProjectDirectory 创建一个组合的 jacoco.exec 文件。此属性自 maven 3.3.1 起可用,并指向您开始构建 maven 的文件夹。

关于java - 具有单独测试模块的 Maven 多模块项目 - 代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908430/

相关文章:

java - 如何使用 Homebrew 在 osx macOS Mojave 上安装 Java 8?

java - 是否也可以删除加权图中的某些边

java - 无法从 jar 中给出的扩展 Activity 启动 Activity

java - 本地tomcat中的GWT应用: nocache. js 404未找到

扩展抽象类的类的 PHPUnit 代码覆盖率

java - 枚举类型的 Emma 覆盖率

java - 如何在进入后台时完成应用程序

javascript - 用 javascript 写入文件

maven - 使用 Maven 构建 Hadoop - "Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (create-testdirs)"

python - GitHub 操作 : which shell for codecov-bash on Windows?