2017-08-30 233 views
2

我很難以某種方式設置我的項目,因此SonarQube報告每次測試的測試覆蓋率。如何在SonarQube中獲得每次測試的覆蓋率?

在與聲納掃描儀分析我剛纔看到

No information about coverage per test. 

讀取JaCoCo執行數據之後。

這對工作有什麼要求?一個最小例子看起來如何顯示每個測試的覆蓋率。

我現在的環境是這樣的:

  • SonarQube 6.4
  • SonarJava 4.12.0
  • 聲納掃描儀3.0.3
  • Eclipse的霓虹燈
  • EclEmma 3.0.0/0.7 JaCoCo。 9

而我的測試項目如下所示:

Workspace 
+- EclipseProject 
| +- bin 
| | +- foo 
| | | +- FooClass.class 
| | +- tests 
| |  +- FooTestClass.class 
| +- src 
|  +- foo 
|  | +- FooClass.java // Class with getter/setter for a private 
|  |     // instance variable. 
|  +- tests 
|  +- FooTestClass.java // Two JUnit 4 tests: test1 checks getter, 
|        //     test2 checks setter. 
| 
+- xml 
| +- TEST-tests.xml // Export from Eclipse after combined test run, converted to fit Surefire format. 
| 
+- coverage 
| +- test1.exec // Session export from Eclipse after single test run. 
| +- test2.exec // Session export from Eclipse after single test run. 
| 
+- sonar-project.properties 

正如您所看到的,執行數據每個測試都存在。的sonar-project.properties內容看起來如下:

sonar.projectKey=EclipseProject 
sonar.projectName=EclipseProject 
sonar.projectVersion=1.0.0-20170830 
sonar.projectBaseDir=/path/to/Workspace 
sonar.sources=src/foo/ 
sonar.tests=src/tests/ 
sonar.sourceEncoding=UTF-8 
sonar.language=java 
sonar.java.source=1.8 
sonar.java.binaries=bin/ 
sonar.java.coveragePlugin=jacoco 
sonar.jacoco.reportPaths=/absolute/path/to/coverage/test1.exec,/absolute/path/to/coverage/test2.exec 
sonar.junit.reportPaths=/absolute/path/to/xml/ 
sonar.analysis.mode=publish 

我不知道缺少了什麼。也許文件需要以特定的方式命名,如測試結果(僅以Surefire格式提取TEST-*.xml報告)?

回答

1

多虧了聲納的Java插件是開源的,我發現了問題:

private boolean analyzeLinesCoveredByTests(String sessionId, 
         ExecutionDataStore executionDataStore) { 

    int i = sessionId.indexOf(' '); 
    if (i < 0) { 
     return false; 
    } 
    String testClassName = sessionId.substring(0, i); 
    String testName = sessionId.substring(i + 1); 
    InputFile testResource = javaResourceLocator 
           .findResourceByClassName(testClassName); 
    ... 

傾銷會話的ID的格式必須爲testClassName testName(例如,在我的情況,這將是tests.FooTestClass test1爲TEST1) 。只有這樣你才能在SonarQube中看到測試覆蓋率信息。

相關問題