Нет информации о покрытии тестом. от Sonar со сборкой Jacoco Ant

Я использую Ant, Jacoco и Sonar. Когда я запускаю свою сборку, Sonar сообщает мне, что «Нет информации о покрытии для каждого теста». и на приборной панели Sonar есть результаты моего покрытия, но я не могу углубиться в них, чтобы увидеть код. Однако HTML-отчет, сгенерированный Jacoco, включает детализацию кода. Это моя задача по освещению:

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

И моя цель Sonar выглядит так:

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

Кто-нибудь знает, что мне не хватает?


person Paul Grenyer    schedule 17.05.2013    source источник


Ответы (2)


Похоже, вы не установили свойство «sonar.tests», чтобы сообщить Sonar, где найти исходный код ваших модульных тестов. См. http://docs.sonarqube.org/display/SONAR/Analysis+Parameters.

Дэвид РАКОДОН | SonarSource

person David RACODON - QA Consultant    schedule 20.05.2013
comment
Я подтверждаю - в моем случае это было установлено для тестовых источников, тогда как оно должно указывать на скомпилированные классы. - person Adam Adamaszek; 27.05.2013
comment
Я попытался добавить свойство sonar.tests, чтобы указать как на исходный код, так и на байтовый код. Ни один из них не работал. Я все еще в тупике с этим. - person Paul Grenyer; 04.06.2013
comment
У меня точно такая же проблема. Я думаю, что это может быть ошибка с задачей Ant, так как я сделал это с помощью Sonar Runner, и он работал нормально, но те же свойства в Ant терпят неудачу. - person rozner; 18.07.2013
comment
Случается и со сборками gradle. - person Ryan Walls; 23.03.2014
comment
Вы не пробовали добавить это свойство: sonar.jacoco.itReportPath=target/jacoco-it.exec? - person krems; 03.09.2014
comment
@AdamAdamaszek, ты не прав. Как четко указано в разделе «Параметры анализа» по приведенной выше ссылке, свойство sonar.tests должно содержать разделенные запятыми пути к каталогам, содержащим тестовые исходные файлы. - person John Allison; 24.06.2020

Свойство 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 — это свойство, используемое в этом плагине.

Ответ Дэвида Ракодона (https://stackoverflow.com/a/16645108/1019307) когда-то был правильным, но в середине 2014 года. SonarQube прекратил выполнение тестов как часть выполнения сонара (http://www.sonarqube.org/unit-test-execution-in-sonarqube/). Следовательно, почему указание на тестовый источник больше не работает.

person HankCa    schedule 17.06.2016
comment
Это sonar.tests, а не sonar.test Также: несовместимо с Maven, который извлекает тест из расположения по умолчанию для проектов Java Maven. См. docs.sonarqube.org/display/SONAR/Analysis+Parameters. - person Hubert Grzeskowiak; 26.10.2016
comment
Хорошо, это неправильный параметр (хотя у меня это сработало). Хотя на самом деле это не неправильно, а избыточно. Это повод минусовать? Простой комментарий заставил бы меня обновить свой ответ. - person HankCa; 27.10.2016