Ответ 1
Похоже, вы не установили свойство "sonar.tests", чтобы сообщить Sonar, где найти исходный код ваших модульных тестов. См. http://docs.sonarqube.org/display/SONAR/Analysis+Parameters.
Дэвид РАКОДОН | SonarSource
Я использую 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>
И моя цель сонара выглядит так:
<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>
Кто-нибудь знает, что мне не хватает?
Похоже, вы не установили свойство "sonar.tests", чтобы сообщить Sonar, где найти исходный код ваших модульных тестов. См. http://docs.sonarqube.org/display/SONAR/Analysis+Parameters.
Дэвид РАКОДОН | SonarSource
Свойство 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>
В этом случае используются некоторые другие свойства:
jacoco-maven-plugin
, а sonar.jacoco.reportPath
- это свойство, используемое в этом плагине.Ответ Дэвида Ракодона (fooobar.com/info/539301/...) был некорректным, но в середине 2014 года SonarQube прекратил выполнение тестов как часть выполнения сонара (http://www.sonarqube.org/unit-test-execution-in-sonarqube/). Следовательно, почему указание на источник теста больше не работает.