2012-06-13 70 views
1

從maven 2切換到maven 3後,我發現cobertura報告的測試覆蓋率爲0%。我說的問題哪些的Cobertura和萬無一失的版本使用方法:What versions of cobertura and surefire plugins work together under maven3?在Maven 3下,surefire的forkMode'never'與cobertura一起工作嗎?

我有,但是,研究問題深入,發現的配置片段是什麼不工作:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>${surefire.plugin.version}</version> 
      <configuration> 
       <forkMode>never</forkMode> 
       <redirectTestOutputToFile>true</redirectTestOutputToFile> 
       <argLine>-Xmx512m -XX:MaxPermSize=256m</argLine> 
      </configuration> 
     </plugin> 

更改forkMode後neveronce開始生成測試覆蓋率。所以,問題不是插件版本不兼容本身,而是由各種分叉模式的保證由cobertura下maven支持的問題3.

所以,我的問題是,它是一個錯誤,或cobertura插件設計這樣,它不會與一些forkMode=never?在JVM退出時

+0

你爲什麼要指定與forkMode的argLine =從不,因爲argLine的時候,如果忽略你不是分手 –

回答

1

Cobertura被設計成爲輸出的覆蓋效果。

<forkMode>never</forkMode>指示Maven的不fork一個JVM運行的測試,但重新使用當前JVM。

在這種情況下,覆蓋結果可能不輸出直到Maven的執行完成。我不是100%確定的,但我認爲cobertura插件使用的分叉生命週期(evilly)如何工作會導致分叉生命週期的JVM分叉,或者有效地卸載了classloader卸載相同的結果。

因此,在我看來,這是Maven 2的一個錯誤,覆蓋率發生與<forkMode>never</forkMode>工作。

注:<forkMode>never</forkMode>被認爲是因爲如何系統屬性不會每一個classloader範圍的,其他問題相當危險的。 <forkMode>once</forkMode>通常是最好的選擇(除非你有虐待內存測試 - JUnit的一些版本把所有內存中的測試類的實例,直到在運行結束時報告的,所以如果每個測試類持有上重物,GC會無法清除出來,因爲它們是活的,直到試運行的結束。在這種情況下,perclass /總是forkMode將被要求)

相關問題