2013-05-17 13 views
10

Używam Ant, Jacoco i Sonaru. Kiedy uruchamiam swoją kompilację, Sonar mówi mi: "Brak informacji o zasięgu w teście". i panel kontrolny Sonar ma moje wyniki zasięgu, ale nie mogę przejść do nich, aby zobaczyć kod. Jednak raport HTML generowany przez Jacoco uwzględnia drążenie kodu. To jest moje zadanie pokrycie:
"Brak informacji o zasięgu na test." z Sonaru z konstrukcją Jacoco Ant

<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> 

A mój cel Sonar wygląda następująco:

<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> 

Czy ktoś wie, co mi brakuje?

Odpowiedz

2

Wygląda na to, że nie ustawiłeś właściwości sonar.tests, aby poinformować Sonar gdzie znaleźć kod źródłowy testów jednostkowych. Zobacz http://docs.sonarqube.org/display/SONAR/Analysis+Parameters.

David RACODON | SonarSource

+2

Potwierdzam - w moim przypadku było to ustawione na testowanie źródeł, podczas gdy powinno wskazywać na skompilowane klasy. –

+5

Próbowałem dodać właściwość sonar.tests, aby wskazać zarówno kod źródłowy, jak i bajtowy. Żaden nie zadziałał. Nadal jestem tym zaskoczony. –

+0

Mam ten sam problem. Myślę, że może to być błąd związany z zadaniem Ant, tak jak to zrobiłem przy użyciu Sonar Runner i działało dobrze, ale te same właściwości w Ant zawiedzie. – rozner

2

Właściwość sonar.test powinna być ustawiona na klasy testowe. Mamy w naszym maven pom. Dla ANT zrobić coś podobnego:

<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> 

Incidently istnieją inne właściwości używane w tym:

  • Mam generowane przez token SONAR moim sonaru użytkownik Zamiast używać loginu i hasła
  • Zasięg JaCoCo generowany jest osobno przy użyciu jacoco-maven-plugin, a sonar.jacoco.reportPath jest właściwością używaną w tej wtyczce.

Davida Racodon za odpowiedź (https://stackoverflow.com/a/16645108/1019307) był niegdyś poprawne, ale w połowie 2014 roku SonarQube zatrzymany wykonywania badań w ramach realizacji sonaru (http://www.sonarqube.org/unit-test-execution-in-sonarqube/). Dlatego też wskazanie źródła testu już nie działa.

+0

To jest 'sonar.tests', a nie' sonar.test' Również: "Nie jest zgodny z Maven, który pobiera test z domyślnej lokalizacji dla projektów Java Maven." Zobacz http://docs.sonarqube.org/display/SONAR/Analysis+Parameters –

+0

OK, który jest błędny jeden parametr (chociaż zadziałało to dla mnie). Chociaż w rzeczywistości nie jest źle, ale jest zbędny. Czy to jest powód do przegłosowania? Prosty komentarz kazałby mi zaktualizować moją odpowiedź. – HankCa

+1

Witam @HankCa, Po zaktualizowaniu odpowiedzi usunąłem notatkę. Nie rób tak poważnych głosów :-) –

Powiązane problemy