首先构建一个多模块的 Maven
项目,项目结构如下:
├── product-service
│ └── pom.xml
├── sum-service
│ └── pom.xml
├── app
│ └── pom.xml
├── pom.xml
其中 product-service
和 sum-service
表示功能代码,app
负责测试用例的整合。product-service
和 sum-service
分别包含一个 ProductService
类和 SumService
类,具体代码如下:
// ProductService
public class ProductService {
public int product(int x, int y) {
return x * y;
}
}
// SumService
public class SumService {
public int sum(int x, int y) {
return x + y;
}
}
app
内的测试用例如下:
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
插件:
<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
插件:
<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
目录下就会生成各个模块的覆盖测试报告:
![44c8bfb3dfd94d2a2d5874a64b2e3864.png](https://i-blog.csdnimg.cn/blog_migrate/9118c8f9d13c67c33f0478e26b337122.png)
完整的代码可参考 GitHub。
参考:
- Jacoco report aggregation for code coverage