个别的SpringBoot我的项目会由多Module组成,每个Module为不同的功能模块。我的项目启动时,多个Module提供不同的服务,独特反对了本我的项目所提供的服务。若采纳启动SpringBoot的形式进行多Module集成测试,个别test case会放在SpringApplication类所在的Module中,该Module个别仅提供了服务的入口,并无太多理论业务性能「简略来说,业务代码都不在这个Module中」。本文探讨运行集成测试,对多Module测试覆盖率合并统计的办法。

我的项目构造

本文所述的我的项目具备如下构造:

- pom.xml- subModule 1- - pom.xml- subModule 2- - pom.xml

Root pom.xml治理我的项目公共Maven配置,subModule 1为利用入口,SpringApplication类也在其中,SpringBoot也在此Module中启动;subModule 2为业务功能模块,提供Service服务。

抉择JaCoCo

个别测试覆盖率统计工具,独自在Module内执行test case,并别离为每个Module创立覆盖率报告,没有跨Module覆盖率的内置反对,也没有多个Module的合并报告。依据这篇文章Java覆盖率工具jacoco,Cobertura可知,JaCoCo有很多劣势,根本成为了目前惟一可用的工具,依据JaCoCo官网文档MavenMultiModule所述,JaCoCo 0.7.7版实现了新的Maven Goal jacoco:report-aggregate 。所以本文就基于以上材料,钻研并生成Maven多Module覆盖率汇总文档。

应用JaCoCo生成测试覆盖率文档

因为官网只是强调实现了该性能,并未给出最佳实际,再次通过搜寻材料,发现了这篇 StackOverflow 回复给出了最佳实际,按其中的批示操作即可:

  1. 在根 pom.xml 中增加 jacoco-maven-plugin:
<?xml version="1.0" encoding="UTF-8"?><project>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.jacoco</groupId>                <artifactId>jacoco-maven-plugin</artifactId>                <version>0.8.4</version>            </dependency>        </dependencies>    </dependencyManagement>    <build>        <plugins>            <plugin>                <groupId>org.jacoco</groupId>                <artifactId>jacoco-maven-plugin</artifactId>                <version>0.8.4</version>                <executions>                    <execution>                        <id>prepare-agent</id>                        <goals>                            <goal>prepare-agent</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build></project>
  1. 在启动SpringBoot的子Module中,增加如下构建配置即可,不要忘了应用maven-surefire-plugin插件对test case进行治理。
<project>    <dependencies>        <dependency>            <groupId>org.jacoco</groupId>            <artifactId>jacoco-maven-plugin</artifactId>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-surefire-plugin</artifactId>            </plugin>            <plugin>                <groupId>org.jacoco</groupId>                <artifactId>jacoco-maven-plugin</artifactId>                <version>0.8.4</version>                <executions>                    <execution>                        <id>report-aggregate</id>                        <phase>verify</phase>                        <goals>                            <goal>report-aggregate</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build></project>
  1. 配置好后,只须要在利用根目录下「Root pom.xml所在的目录下」,执行Maven指令 mvn verify,之后在SpringBoot子Module中,关上target/site/jacoco-aggregate/index.html,即可在浏览器中查看具体的测试覆盖率报告了。覆盖率报告示例如下:

参考资料

  1. Maven中测试插件(surefire)的相干配置及罕用办法
  2. Creating Multi-project Builds
  3. java - Reporting and Merging multi-module jacoco reports with report-aggregate - Stack Overflow
  4. MavenMultiModule · jacoco/jacoco Wiki · GitHub
  5. Java覆盖率工具jacoco,Cobertura_zzhongcy的专栏-CSDN博客_cobertura 端口占用