Clover:解決Java8和Cobertura的問題以及解決方法
最近在使用EvoSuite和Cobertura的時候,Cobertura報錯最後的代碼覆蓋報告什麼都沒有。發現問題的第一反應就是Cobertura和Jacoco一樣了嗎?難道也是字節碼注入的問題?但是我的其他的項目並沒有出現問題,這樣我又回到了原來的正確解決而問題的軌道上。
解決思路
有一個項目的小夥伴反饋我們一直在使用的智能測試框架EvoSuite啞火了,我也感到莫名其妙。爲什麼呢,因爲我們已經在內部很多項目在使用這個框架了,爲什麼這個框架在這裏不行了呢?我馬上找到項目的master,要了項目的git權限。從自動生成單元測試導致執行測試全部嘗試了一遍,發現問題並不是在執行evosuit的時候出現新,而是在執行測試覆蓋插件的時候出現的,下面是出錯信息。
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中引入如下配置:
<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
就可以獲得單元測試代碼覆蓋報告了。