首先构建一个多模块的 Maven 项目,项目结构如下:
1 2 3 4 5 6 7
| ├── product-service │ └── pom.xml ├── sum-service │ └── pom.xml ├── app │ └── pom.xml ├── pom.xml
|
其中 product-service 和 sum-service 表示功能代码,app 负责测试用例的整合。product-service 和 sum-service 分别包含一个 ProductService 类和 SumService 类,具体代码如下:
1 2 3 4 5 6
| public class ProductService { public int product(int x, int y) { return x * y; } }
|
1 2 3 4 5 6
| public class SumService { public int sum(int x, int y) { return x + y; } }
|
app 内的测试用例如下:
1 2 3 4 5 6 7
| public class AppTest { @Test public void shouldCalculateCorrectSumAndProduct() { Assert.assertEquals(10, new ProductService().product(2, 5)); Assert.assertEquals(5, new SumService().sum(2, 3)); } }
|
然后在 root 模块的 pom.xml 文件中配置 JaCoCo 插件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.5</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
|
最后在 app 模块的 pom.xml 文件中配置 JaCoCo 插件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <argLine>${argLine} -Xms256m -Xmx2048m</argLine> <forkCount>1</forkCount> <runOrder>random</runOrder> </configuration> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.5</version> <executions> <execution> <id>report-aggregate</id> <phase>test</phase> <goals> <goal>report-aggregate</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
|
此时在 root 模块下执行 mvn test,执行成功后在 app/target/site/jacoco-aggregate 目录下就会生成各个模块的覆盖测试报告:

完整的代码可参考 GitHub。
参考: