コードカバレッジにJaCoCoを使用しています。ユニットテストレポートはjunitで作成され、正しくインポートされるため、ユニットテスト情報が適切に表示されます。 問題は、エラーメッセージが表示されることです:テストごとのカバレッジに関する情報がありません。とコードカバレッジは、ユニットテスト、統合テスト、および全体的なカバレッジの値0%を示しています。バイナリ、src、テストなどのsonar-project.propertiesですべての必要な情報をチェックしました。
私が使用しています:
-SonarQube 4.5.1
-SonarRunner 2.4
-MySQL
-junit 4.1.1
-jacoco 0.7.2
Jacoco.execは、プロジェクトのベースディレクトリの/ targetファイルにあります。
以下では、sonar-project.propertiesを確認できます。私の観点から、すべての必要なパスが適切に設定されています。 (つまり、バイナリ、src、テスト)
Comma-separated paths to directories with sources (required)
sonar.sources=src
compiled code
sonar.Java.binaries=class
source code of unit tests
sonar.tests=test/src
Comma-separated paths to files with third-party libraries (JAR files in the case of Java)
sonar.Java.libraries=jar
Language
sonar.language=Java
Encoding of the source files
sonar.sourceEncoding=UTF-8
Additional parameters
sonar.my.property=value
Set Project Base
sonar.projectBaseDir=C:/snapshots/steffen_latest/software/Java
Tells SonarQube to reuse existing reports for unit tests execution and coverage reports
sonar.dynamicAnalysis=reuseReports
JUnit path
sonar.surefire.reportsPath=test/report/junit
Tells SonarQube where the unit tests execution reports are
sonar.junit.reportsPath=test/report/junit
Tells SonarQube that the code coverage tool by unit tests is JaCoCo
sonar.Java.coveragePlugin=jacoco
Import JaCoCo code coverage report.
Tells SonarQube where the unit tests code coverage report is
Unit Tests Coverage
sonar.jacoco.reportPath=target/jacoco.exec
Tells SonarQube where the integration tests code coverage report is
sonar.jacoco.itReportPath=target/it-jacoco.exec
これはソナーランナーからのログファイルです:
13:56:05.883 INFO - Sensor SurefireSensor...
13:56:05.883 INFO - parsing C:\work\snapshots\steffen_latest\software\Java\test\report\junit
13:56:06.149 INFO - Sensor SurefireSensor done: 266 ms
13:56:06.149 INFO - Sensor JaCoCoItSensor...
13:56:06.195 INFO - Analysing C:\work\snapshots\steffen_latest\software\Java\target\it-jacoco.exec
13:56:06.726 INFO - **No information about coverage per test**.
13:56:06.726 INFO - Sensor JaCoCoItSensor done: 577 ms
13:56:06.726 INFO - Sensor JaCoCoOverallSensor...
13:56:06.851 INFO - Analysing C:\work\snapshots\steffen_latest\software\Java\.sonar\jacoco-overall.exec
13:56:07.178 INFO - **No information about coverage per test**.
13:56:07.178 INFO - Sensor JaCoCoOverallSensor done: 452 ms
13:56:07.178 INFO - Sensor JaCoCoSensor...
13:56:07.209 INFO - Analysing C:\work\snapshots\steffen_latest\or_base\software\Java\target\jacoco.exec
13:56:07.521 INFO - **No information about coverage per test**.
13:56:07.521 INFO - Sensor JaCoCoSensor done: 343 ms
13:56:07.521 INFO - Sensor CPD Sensor (wrapped)...
13:56:07.521 INFO - JavaCpdEngine is used for Java
13:56:07.521 INFO - Cross-project analysis disabled
13:56:09.019 INFO - Sensor CPD Sensor (wrapped) done: 1498 ms
13:56:09.144 INFO - Execute decorators...
13:56:16.166 INFO - Store results in database
誰が問題になる可能性があるかアドバイスをくれますか?何が問題なのかわからないので...数日からこの問題に取り組んでおり、どうすればいいのか本当にわかりません。
前もって感謝します。
prepare-agent
を使用してみましたか?
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install
また、カバレッジが0%を示し続ける場合は、 このアドバイス に従う必要があります。
プロジェクトですでにargLineを使用してsurefire-maven-pluginを構成している場合は、argLineがプラグイン構成の一部としてではなく、プロパティとして定義されていることを確認してください。」
このMaven構成では、テストデータごとのカバレッジを確認できます。
テストごとのカバレッジを取得するには、sonar-jacoco-listenersを構成する必要があります。
sonar によって非推奨になっていることに注意してください:「この機能はSonarQubeレベルでは非推奨であり、今後の改善/メンテナンスは受けられなくなります。」
<skipTests>false</skipTests>
<!--Jacoco settings -->
<jacoco.haltOnFailure>false</jacoco.haltOnFailure>
<jacoco.skip>false</jacoco.skip>
<!-- sonar JACOCO properties -->
<sonar.Java.coveragePlugin>jacoco</sonar.Java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPaths>${project.reporting.outputDirectory}/jacoco-ut.exec</sonar.jacoco.reportPaths>
<sonar.language>Java</sonar.language>
<!-- Added for Jacoco -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<properties>
<property>
<name>listener</name>
<value>org.sonar.Java.jacoco.JUnitListener</value>
</property>
</properties>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<configuration>
<destFile>${sonar.jacoco.reportPaths}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<version>0.8.1</version>
<classifier>runtime</classifier>
</dependency>
<dependency>
<groupId>org.codehaus.sonar-plugins.Java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
私の場合、以下のコマンドが機能します。
mvn clean org.jacoco:jacoco-maven-plugin:0.7.3.201502191951:prepare-agent install
mvn sonar:sonar
コードカバレッジを確認するには: SonarQubeサーバーを起動-> 2つのコマンドを上から順に実行すると、 SonarQube Client にコードカバレッジが表示されます。
FYI: My SonarQubeバージョン-5.1.2。最新バージョンは からダウンロードできますSonarQubeダウンロード
私はJUnitも使用していますが、私の場合、問題はpom.xmlにTestNG依存関係があることが原因でした。この不要な依存関係を削除した後、すべてが期待どおりに機能し始めました。