首先构建一个多模块的 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 。
参考: