看我的工程例子,DEMO工程参见:coverage-across-modules-demo
+parent
|--core
|--api
|--spi
|--test
|--test-common
|--test-integration
API 和 SPI 下都有单测,但是一些测试用例既用到 API 和 SPI 的地方,就放到 test-integration 模块下。
本来是要 Travis CI + coveralls + codecov 统计工程代码覆盖率的,
<plugin>
<groupId>org.eluder.coveralls</groupId>
<artifactId>coveralls-maven-plugin</artifactId>
<version>3.2.1</version>
</plugin>
# .travis.yml
after_success:
- bash <(curl -s https://codecov.io/bash)
但是发现覆盖率统计不对,原因是 test-integration 里的测试用例,没有 API 和 SPI 的源码,根部不纳入覆盖率统计。
网上也有不少例子,但是都比较麻烦。
后来发现 jacoco 默认支持这个功能,那就是 jacoco 0.7.7 的一个新特性 report-aggregate
使用方式如下:DEMO工程参见:coverage-across-modules-demo
第一步:在主pom.xml
加入
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>test</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
第二步:在没用源码的工程里加入 <dependency />
依赖
例如在:test/test-integration/pom.xml
里加入
<dependencies>
<dependency>
<groupId>xx</groupId>
<artifactId>test-common</artifactId>
</dependency>
<dependency>
<groupId>xx</groupId>
<artifactId>spi</artifactId>
</dependency>
<dependency>
<groupId>xx</groupId>
<artifactId>api</artifactId>
</dependency>
<dependencies>
第三步:直接 mvn test
即可。这时候执行 test-integration 测试用例的时候,就会自动找到依赖工程的源码,并计算覆盖率。
附:DEMO工程参见:coverage-across-modules-demo
网友评论