2009-04-09 89 views
22

在我們的項目中,我們使用maven運行junits和cobertura。我現在面臨的問題是,運行junits和maven的cobertura

  1. JUnit測試案件的jar創建過程之前一次又一次生成的Cobertura覆蓋報告運行兩次,然後。當與螞蟻一起運行cobertura和junits時,我們只運行一次junit,因爲cobertura和junit一起運行。有沒有辦法用maven配置上面的例子。我知道我們可以使用「maven.test.skip」屬性來跳過junits。但是當我這樣做時,我無法看到junit xml和html文件報告。
  2. 另外,在maven中如何配置junit以批處理或並行方式運行?

謝謝!

+0

你的第二個問題確實是一個單獨的問題,似乎cna在這裏轉貼:http://stackoverflow.com/questions/423627/running-junit-tests-in-parallel – 2009-04-16 04:32:04

回答

22

雖然我找不到確切的頁面,但我最近閱讀了兩次爲什麼運行測試被認爲是一個好主意的討論。引用的關鍵問題圍繞着Cobertura字節碼更改對測試準確性的影響。在某些情況下,代碼執行的時間可能很重要,字節代碼的更改可能會導致JUnit中的測試失敗,只能在Cobertura中運行,反之亦然。出於這個原因,建議允許測試執行兩次。大部分引用的例子都是圍繞着多線程行爲,但我想可能還有其他一些情況,比如字節碼的變化會導致測試中的問題。如果Cobertura實際上正在改變測試成功,那麼通過兩種方式執行測試可以爲您提供基準結果,並且還可以減少發送大量鵝羣的機會。

+4

這是一個很好的觀點。我一次碰到的另一件事是,由於字節碼重寫,如果你的代碼使用反射很多,它可能會導致問題。例如,如果您有一個從類中提取字段的實用程序,並且您的單元測試聲明示例類有三個字段,那麼當您使用代碼覆蓋率運行時,此測試實際上會失敗。 – 2010-03-05 22:51:49

1

嘗試添加cobertura作爲編譯範圍參考。併發布你的POM的相關部分。

+3

不會作爲依賴項(與編譯範圍)只有在你的項目試圖在cobertura之上構建某些東西時纔有用?這可能不是Ajay想要的。 – 2010-03-05 22:49:35

1

發生這種情況是因爲報告執行需要測試執行,因此它可以創建報告。如果網站插件中沒有@requiresDependencyResolution test註釋的「僅限網站」目標,它可能會綁定到項目的prepare-package階段,並且您的報告將在測試運行兩次的情況下生成。

不幸的是,似乎目前沒有這樣的目標(請參閱我的question關於此主題)。 有關解決方法的詳細信息,請參閱我對問題的回答。