最近在使用EvoSuite和Cobertura的时候,Cobertura报错最后的代码覆盖报告什么都没有。发现问题的第一反应就是Cobertura和Jacoco一样了吗?难道也是字节码注入的问题?但是我的其他的项目并没有出现问题,这样我又回到了原来的正确解决而问题的轨道上。
解决思路
有一个项目的小伙伴反馈我们一直在使用的智能测试框架EvoSuite哑火了,我也感到莫名其妙。为什么呢,因为我们已经在内部很多项目在使用这个框架了,为什么这个框架在这里不行了呢?我马上找到项目的master,要了项目的git权限。从自动生成单元测试导致执行测试全部尝试了一遍,发现问题并不是在执行evosuit的时候出现新,而是在执行测试覆盖插件的时候出现的,下面是出错信息。
代码语言:javascript复制INFO: Cobertura: Loaded information on 0 classes.
........
INFO: Cobertura: Saved information on 0 classes.
第一次遇见,我赶紧去google上查找了一下,发现Cobertura和Java8就是会有这个问题,网络上的方法全部尝试了一遍,比如升级这个插件的版本等根本解决不了问题。
最后的解决办法是换到了代码覆盖的工具,代替工具是Clover。
Clover
Clover是一款曾经收费的代码覆盖率查询插件,它可以配合JUnit等测试插件,对代码测试结果进行分析说明。就冲着曾经还收费这个事情应该还是很有优势的。
开源地址:https://bitbucket.org/atlassian/clover
在Mvn中引入如下配置:
代码语言:javascript复制<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>clover-maven-plugin</artifactId>
<version>4.1.2</version>
<configuration>
<excludes>
<exclude>**/*_ESTest.java</exclude>
<exclude>**/*_ESTest_scaffolding.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
然后使用mvn clover:setup test clover:aggregate clover:clover
就可以获得单元测试代码覆盖报告了。