Springboot - 多module - 代码覆盖率统计 - JaCoCo

之前一直使用cobertura进行代码覆盖率统计,但是切换到Springboot2且jdk升级到1.8后,发现cobertura对jdk1.8支持不够好,每次遇到lamba表达式时,都会报warn,且cobertura对多模块支持不够友好(需要使用ant,没有实际测试过)且年久失修(好久都没人更新),故使用了JaCoCo进行多模块代码覆盖率统计;

初步方案如下:

项目结构:

Springboot - 多module - 代码覆盖率统计 - JaCoCo_第1张图片

说明:web为启动模块,依赖关系:web->service->manager->dao->entity+common

注:test模块是为了统一代码覆盖率报告而单独建的模块,且test->web+service+manager+dao+entity+common(test依赖其他所有子模块)

最外层父POM:


   
       
       
            org.jacoco
            jacoco-maven-plugin
            0.8.2
           
               
                    prepare-agent
                   
                        prepare-agent
                   

               

               
                    report-aggregate
                    verify
                   
                        report-aggregate
                   

               

           

       

   

子模块POM:

子模块POM只需继承(parent)父POM即可

问题:

实际测试过程中,会在每个子模块中target/site/jacoco-aggregate文件夹下生成index.html,通过浏览器查看该index.html即可直观的看到当前代码测试的覆盖率报告;

Springboot - 多module - 代码覆盖率统计 - JaCoCo_第2张图片

但是实际测试结果并不好,多模块统计结果是进行合并了,但是只有当前模块pom中显式的依赖了其他模块,才会在当前模块的报告中去回去合并显式声明的其他模块,例如:web->service->manager,实际在web中的target/site/jacoco-aggregate/index.html只能查看到service(显式依赖)的统计结果,无法查看到manager(传递依赖)的统计结果,并且web中的index.html也无法查看到自己模块(web)的统计信息;

最终解决方案:

新建了test模块,当前模块里什么代码都没有,但是POM中显式依赖了其他所有模块,显式依赖就是为了聚合其他所有模块的统计报告;

test模块POM:


         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0

    com.mx.server.tsp
    mx-vehicle-parts-management-test
    1.0.0-SNAPSHOT
    jar
    mx-vehicle-parts-management-test

   
        com.mx.server.tsp
        mx-vehicle-parts-management
        1.0.0-SNAPSHOT
   

   
       
       
            com.mx.server.tsp
            mx-vehicle-parts-management-web
       

       
            com.mx.server.tsp
            mx-vehicle-parts-management-service
       

       
            com.mx.server.tsp
            mx-vehicle-parts-management-manager
       

       
            com.mx.server.tsp
            mx-vehicle-parts-management-dao
       

       
            com.mx.server.tsp
            mx-vehicle-parts-management-entity
       

       
            com.mx.server.tsp
            mx-vehicle-parts-management-common
       

   
    

 

综上,为了合并多module的代码测试覆盖率统计报告,

(1)采用了JaCoCo插件,

(2)且单独为了聚合统计报告而新建了一个test模块,当前模块没有任何代码,只是显式依赖了其他所有子模块

(3)在项目根目录下执行mvn install后,即可通过test模块下的target/site/jacoco-aggregate/index.html查考到合并后的代码测试覆盖率报告;

Springboot - 多module - 代码覆盖率统计 - JaCoCo_第3张图片

Springboot - 多module - 代码覆盖率统计 - JaCoCo_第4张图片

缺陷:

test模块除了生成聚合报告,没有任何实际作用,且所有Springboot多模块项目为了聚合代码测试覆盖率报告都需要单独建立一个test模块,成本有点大,且引入了多余的test模块(破环了项目原有结构),希望日后找到更好的方法......

 

你可能感兴趣的:(springboot)