2013-05-17 61 views
10

我正在使用Ant,Jacoco和Sonar。當我運行我的版本聲納告訴我「沒有關於每個測試的覆蓋率的信息。」 Sonar儀表板具有我的覆蓋結果,但我無法深入瞭解它們以查看代碼。但是,Jacoco生成的HTML報告包括深入代碼。這是我的任務範圍:
「沒有關於每次測試覆蓋率的信息。」從聲納與Jacoco Ant build

<jacoco:coverage destfile="${coverage.output.file}" > 
     <junit printsummary="on" 
      errorProperty="test.failed" 
      failureProperty="test.failed" 
      haltonfailure="yes" 
      fork="true"> 
      <formatter type="brief" usefile="false" /> 
      <formatter type="xml" /> 
      <classpath> 
       <path refid="test.build.class.path"/> 
       <pathelement location="${test.bin.dir}"/>  
      </classpath> 
      <batchtest todir="${results.dir}"> 
       <fileset dir="${test.bin.dir}"> 
        <include name = "**/**/*Test.class"/> 
       </fileset> 
      </batchtest> 
     </junit> 
    </jacoco:coverage> 

    <jacoco:report> 
     <executiondata> 
      <file file="${coverage.output.file}"/> 
     </executiondata> 
     <structure name="${ant.project.name}"> 
      <classfiles> 
       <fileset dir="${bin.dir}"/> 
      </classfiles> 
      <sourcefiles encoding="UTF-8"> 
       <fileset dir="${src.dir}"/> 
      </sourcefiles> 
     </structure> 
     <html destdir="${coverage.results.dir}"/> 
    </jacoco:report> 
</target> 

我的聲納目標看起來是這樣的:

<target name="sonar" depends = "run"> 
    <property name="sonar.jdbc.url" value="..." /> 
    <property name="sonar.jdbc.username" value="...r" /> 
    <property name="sonar.jdbc.password" value="..." /> 

    <property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" /> 
    <property name="sonar.projectName" value="${ant.project.name} (ant)" /> 
    <property name="sonar.projectVersion" value="1.0" /> 
    <property name="sonar.language" value="java" /> 
    <property name="sonar.sources" value="${src.dir}" /> 
    <property name="sonar.binaries" value="${bin.dir},${test.bin.dir}" /> 
    <property name="sonar.libraries" value="${lib.dir}/*.jar" />  

    <property name="sonar.dynamicAnalysis" value="reuseReports" /> 
    <property name="sonar.surefire.reportsPath" value="${results.dir}" /> 
    <property name="sonar.java.coveragePlugin" value="jacoco" /> 
    <property name="sonar.jacoco.reportPath" value="${coverage.output.file}" /> 

    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> 
     <classpath>   
      <fileset dir="${lib.dir}" includes="sonar-ant-task-2.0.jar"/> 
     </classpath> 
    </taskdef> 

    <sonar:sonar />  
</target> 

有誰知道我缺少的是什麼?

回答

2

看起來你沒有設置'sonar.tests'屬性來告訴Sonar在哪裏可以找到你的單元測試的源代碼。見http://docs.sonarqube.org/display/SONAR/Analysis+Parameters

David RACODON | SonarSource

+2

我確認 - 在我的情況下,這被設置爲測試源,而它應該指向編譯的類。 –

+5

我試過添加sonar.tests屬性來指向源代碼和字節碼。都沒有工作。我仍然爲此而難過。 –

+0

我有同樣的問題。我認爲這可能是一個Ant任務的bug,因爲我使用Sonar Runner完成了這個任務,並且它工作正常,但Ant中的相同屬性失敗。 – rozner

2

sonar.test屬性應該設置爲測試類。我們在maven pom中有以下內容。對於ANT你做同樣的事情:

<profile> 
     <id>sonarprofile</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <sonar.host.url>....our host..../sonar.host.url> 
      <sonar.projectKey>....our key....</sonar.projectKey> 
      <sonar.projectName>${project.artifactId}</sonar.projectName> 
      <sonar.projectVersion>${project.version}</sonar.projectVersion> 
      <sonar.language>java</sonar.language> 
      <sonar.sources>src/main/java</sonar.sources> 
      <!-- sonar.tests>target/test-classes</sonar.tests --> 
      <!-- that is the default location for Maven projects and --> 
      <!-- this parameter can't actually be set in that case --> 
      <sonar.scm.provider>git</sonar.scm.provider> 
      <sonar.login>${SONAR_LOGIN}</sonar.login> 
      <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> 
      <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> 
      <sonar.jacoco.reportPath>${basedir}/target/coverage-reports/jacoco-unit.exec</sonar.jacoco.reportPath> 
     </properties> 
    </profile> 

順便說一句有這所使用的一些其他屬性:

  • 我產生了SONAR令牌通過我的聲納的用戶,而不是使用登錄名和密碼
  • JaCoCo的覆蓋範圍是使用jacoco-maven-plugin單獨生成的,而sonar.jacoco.reportPath是該插件中使用的屬性。

大衛Racodon的答案(https://stackoverflow.com/a/16645108/1019307)曾經是正確的,但在2014年中期SonarQube停止執行測試的聲納執行(http://www.sonarqube.org/unit-test-execution-in-sonarqube/)的一部分。因此,指向測試源的原因不再有效。

+0

它是'sonar.tests',而不是'sonar.test'還有:「與Maven不兼容,它從Java Maven項目的默認位置檢索測試。」請參閱http://docs.sonarqube.org/display/SONAR/Analysis+Parameters –

+0

好吧,這是一個參數錯了(儘管它對我有用)。雖然它實際上並不是錯誤的,但卻是多餘這是一個downvote的原因嗎?一個簡單的評論會讓我更新我的答案。 – HankCa

+1

嗨@HankCa,現在你已經更新了你的答案,我已經刪除了downvote。不要認真對待單選票:-) –

相關問題