受命瞭解測試裡的Code Coverage,發現一個不錯的目錄網站http://java-source.net,和http://www.open-open.com一樣,是絕世武功的目錄。
這是題外話,Google大多推薦Cobertura,另外也有推薦Emma,皆以JUnit為基礎。而Emma卻未名列java-source.net裡。這兩個都有下載來踹,各有千秋,也各有適用範圍,我會建議兩個都用。
Emma雖然有maven plugin的支援,但目前只到0.5版,她在Eclipse plugin的支援相對出色,適用於個人進行JUnit Test Code Coverage之用,在Eclipse的view看到每支程式的code coverage;Cobertura則可以透過maven plugin產生比美JavaDoc的Code Coverage Report,適用整個系統的code coverage產出閃亮亮的Report給老板或客戶看。
Emma大概到2007年就沒再更新版本了,其Eclipse plugin叫EclEmma,網址是http://update.eclemma.org/.。安裝後,在Toolbar會多出如下的按鈕和選單:
Coverage As可以選擇Java Application或JUnit Test進測Code Coverage,通常是選JUnit Test。在Coverage View長相會是如下:
開發者就能一看出他的source的Code Coverage。可以點選裡的java,在Java editor裡看出哪些程式沒有Cover到(紅色Highlight)。
在Emma比之Cobertura還有黃色highlight,表示局部Cover。
Emma可以用Maven產出Report,不過沒有像Cobertura那麼閃亮亮就是了,先在pom.xml加如下的plugin:
<project>
[...]
<reporting>
<plugins>
<plugin>
<groupId>emma</groupId>
<artifactId>maven-emma-plugin</artifactId>
<version>0.5</version>
</plugin>
</plugins>
</reporting>
[...]
</project>
然後再執行mvn emma:emma就可以產出以下不怎麼閃亮的Report,位在target/site/emma/的index.html
而Cobertura怎麼透過Maven去產出Report呢?在pom.xml設定如下:
<project>
[...]
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.0</version> <!-- 據Google指稱,2.1版以上有點問題,所以用2.0 -->
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
</configuration>
</plugin>
</plugins>
</reporting>
[...]
</project>
然後再執行mvn cobertura:cobertura就可以產出以下閃亮亮的Report,位在target/site/cobertura/的index.html,是不是很適合向上面的交差呢^^?
[後記]強烈懷疑Cobertura想要強娶Emma,因為Cobertura有個emma-maven-plugin,和Emma的maven-emma-plugin別苗頭。而Emma一些Maven的goal都不見了,如emma:test、emma:report,而且訊息是指在Cobertura裡找不到。也許兩者各有擅長,準備聯姻了。