2012-09-12 28 views
17

我正在嘗試爲混合Scala/Java中的團隊編碼設置簡單的代碼覆蓋率報告。 90/10的比例,並遇到一些嚴重的障礙。我之前設置了&受管理的Sonar,以僅使用Java的團隊獲得巨大成功,但它似乎不是一種選擇。是否有與Scala相同的聲納級代碼覆蓋率?

聲納W/Scala插件是越野車,似乎支持Scala-only項目,而不是混合項目。

SCCT與我們的maven版本集成在一起,但是會一再出現假陰性測試失敗。

臥底是我迄今爲止最好的運氣;它與我們的maven build &生成報告集成在一起,但它們不會像Sonar那樣存檔或託管在任何地方。也似乎沒有中央索引來簡化瀏覽生成的報告。

我在這裏StackOverflow上閱讀的答案,但他們在很大程度上可以追溯到2010年和建議,沒有像樣的解決方案是可用的。這有改變嗎?

有什麼明顯的我失蹤了嗎?

+1

Cobertura將如何工作?上次我檢查它是相當有用的,雖然沒有與Sonar集成。 – ron

+0

@龍:這是我的名單上的下一個。我設法讓Undercover將報告寫入Cobertura的XML格式,但由於實際的Cobertura插件沒有運行,Jenkins拒絕承認存在代碼覆蓋報告。 我記得聽說過Cobertura沒有很好地處理Scala可以生成的所有Java類,但我想我會發現。敬請關注! – warandpeace

+1

@ron:Cobertura + Jenkins Cobertura Plugin工作得很好。準確和可讀,顯示趨勢,並允許我深入研究。這不是聲吶,但它的工作原理! – warandpeace

回答

7

關於聲納側:

  • 是的,Scala Sonar Plugin發展目前止步。它是由社區發起的,但沒有人願意接受。如果有志願者,我們很樂意指導和幫助他們。

  • 關於幾種語言的一個項目中的支持​​,將支持在聲納到來。我無法爲您提供路線圖,但我們現在正考慮如何在下一個版本的Sonar中添加此支持,因此這是一個短期問題。

+0

4年來,仍然沒有任何關於聲納Scala支持的文字。來自Freddy Mallet的最後一句話僅僅是爲了證實這一點:https://groups.google.com/forum/#!topic/sonarqube/MkcW9tFG8UY – RCross

6

您可以使用SCCTJaCoCo

  • SCCT:它支持Scala 2.10版本,但開發似乎停滯了大約9個月。它本身支持Scala,並可與Maven和SBT一起使用。
  • JaCoCo正在進行sctive開發。它支持任何版本的Scala,但不支持本地,但在字節碼級別。所以你可能會得到一些文物,例如一些代碼只能獲得部分覆蓋,因爲生成的字節碼具有JaCoCo看到的一些理論代碼路徑(但是永遠不能從Scala代碼執行)。

JaCoCo可能會有點棘手與Maven和Scala搭檔。這裏有一些技巧:

  1. 在代理程序啓動器中使用該變體。不要使用具有預處理字節碼的變體。
  2. 當使用JaCoCo與Maven:有一個Maven任務(jacoco:prepare-agent),這將產生正確的表達爲代理啓動並將其存儲到一個屬性。然後,您可以在運行Java虛擬機時將此屬性用作命令行參數。
  3. 參數化代理啓動器,以便多次啓動(例如,運行不同的測試)寫入同一個日誌文件。一些IDE插件在解析這樣的文件時會遇到問題,但JaCoCo Hudson插件例如工作正常。
+1

感謝您的回答,我剛剛設法讓SCCT生成cobertura報告,並且我們Jenkins cobertura插件來閱讀它。然而SCCT包含了代碼覆蓋範圍內的所有內容。我希望能像JaCoCo一樣排除一些文件夾。 jacoco.excludes in jacoco.Config:= Seq(「views *」,「* Routes *」,「controllers * routes *」,「controllers * Reverse *」,「controllers * javascript *」,「controller * ref *」) , – Roch

+0

你知道我能做到嗎? – Roch

+0

你最好的選擇可能是發佈進程cobertura.xml文件。您可以使用maven Groovy集成輕鬆完成此操作(http://books.sonatype.com/mcookbook/reference/ch02s02.html)。或者,您可以更改文件CoberturaReporter.scala(https://github.com/mtkopone/scct/blob/master/src/main/scala/reaktor/scct/report/CoberturaReporter.scala) –