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