2017-04-06 65 views
0

我已經搜索過以前使用過的關於這個問題的答案,但是我最終處於一個我不確定是否有可能繼續的地步,我想確保jacoco支持這個。 我有一個多模塊Maven項目,我使用了集成測試黃瓜:Jacoco + Cucumber + Maven設置

<modules> 
    <module>a</module> 
    <module>b</module> 
    <module>c</module> 
</modules> 

    <profiles> 
    <profile> 
     <id>env-local</id> 
     <modules> 
      <module>acceptance-tests</module> 
     </modules> 
    </profile> 

驗收檢驗模塊沒有在父POM,但接受檢驗的pom.xml的標籤定義具有相同的父定義作爲模塊的其餘部分。

問題是所有集成測試都在驗收測試中。我在這個模塊中甚至沒有src/main/java文件夾。我發現的大多數例子都在每個模塊中都有驗收測試,覆蓋範圍是爲屬於該模塊的代碼生成的。

在我的情況下,我需要生成一個包含所有使用類的報告,即使它們來自另一個模塊。我也設法做到了這一點,但我只能找到'第一級'的覆蓋範圍:如果直接從spb-acceptance使用類,它將包含在報告中,但我找不到任何有關所用類的信息間接的影響。

這種覆蓋面是否可以通過jacoco來實現?

謝謝!

回答

0

您的問題是,Maven在構建項目時使用了深度優先方法。也就是說,它將完成模塊中的所有內容,然後再轉到下一個模塊。

結果是

  • 生產類被編譯
  • 生產類被儀表所以代碼覆蓋可以被測量
  • 測試被執行和使用被記錄
  • 用法結果被收集
  • 用下一個模塊重複

這是斷開的位置,依賴於前一個模塊的新模塊將使用生成的依賴關係。現在緩存在本地Maven緩存中的jar。 jar中的類不會被檢測到,也不會記錄它們的使用情況。

我使用了一個解決方案是

  • 編譯所有代碼
  • 儀器代碼
  • 執行所有測試
  • 鞏固和發展報告

我寫了blog post大約在幾年前。

+0

我會在週末看看是否可以應用此解決方案。感謝您的回覆,至少現在我知道發生了什麼。 –

0

問題是我沒有重用jacoco-it.exec文件。它工作時,我有一個模塊,而是一個子模塊它是在模塊的目標去和它不能再使用該文件

<modules> 
    <module>a</module> 
    <module>b</module> 
    <module>c</module> 
</modules> 

所以計算出的覆蓋率不具有模塊本身的模塊。 如果b有b1和b2,則使用此條目$ {project.basedir} /../ target/jacoco-it.exec for sonar.jacoco.itReportPath它正在尋找b目標文件,而不是目標文件的主要聚甲醛。