ローカルマシンでSonarQuebe6.2を実行していますが、Spring Boot Java 8プロジェクトがあり、コードカバレッジとともに静的分析のためにSonarにアップロードしたい単体テストが記述されています。
コードカバレッジが生成されます-JaCoCoHTMLレポートがあり、JUnit XMLテストファイルが生成されますが、コードカバレッジが表示されているにもかかわらず、Sonarがユニットテストの結果を見逃しているようです。
pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.facebook4j</groupId>
<artifactId>facebook4j-core</artifactId>
<version>2.4.8</version>
</dependency>
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-Java8</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
</dependency>
<dependency>
<groupId>org.Apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
</execution>
<execution>
<id>generate-code-coverage-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
私のソナー-project.properties:
sonar.projectKey=org.eventizer:EventizerServer
sonar.projectName=EventizerServer
sonar.projectVersion=1.0
sonar.log.level=DEBUG
sonar.sources=src/main/
sonar.language=Java
sonar.Java.source=1.8
sonar.sourceEncoding=UTF-8
sonar.Java.binaries=target/classes/org/eventizer/eventizerserver/
sonar.Java.test.binaries=target/test-classes/org/eventizer/eventizerserver/
sonar.tests=src/test/
sonar.Java.coveragePlugin=jacoco
sonar.jacoco.reportPaths=target/jacoco.exec
sonar.junit.reportPaths=target/surefire-reports/
私はこのmvnコマンドを実行しています:
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test -Dmaven.test.failure.ignore = true
その結果、次の出力でターゲットディレクトリを取得しています。
sonar.Java.binaries
に設定されているクラスディレクトリ:
sonar.Java.test.binaries
に設定されているテストクラスディレクトリ:
Surefire JUnitテストは、sonar.junit.reportPaths
に設定されているディレクトリを報告します。
その後、いくつかの重要な(私はそう思います)出力の下でsonar-scanner.bat
を実行しています。
そして、すべてが適切に生成されたように見えるので、なぜこれが起こっているのか本当にわかりません。昨日からStackOverflowですべてを試したと思うので、重複としてマークしないでください。
このプロジェクトのカバレッジメトリックにアクセスすると、100%単体テストに合格したことがわかるため、これはさらに奇妙です。
さて、私はソナーのバグかもしれない何かを発見しました。
基本的に、このプロジェクトは基本的なmvn sonar:sonar
構成で長い間Sonarにプッシュされてきました。それで、それはテスト結果さえしていませんでした。 Jenkins経由で実行したかったので、必要なすべてのフィールドをsonar-project.properties
に入力し、Sonar-Runner
ではなくmvn sonar:sonar
経由でプッシュしました。
あなたが見ることができるようにそうした後、ユニットテスト品質ゲートは正当な理由もなく失敗していました。私の最新のスクリーンショットでは、実際にユニットテストが100.0%に合格したことがわかります。
projectKey
プロパティを別のプロパティに変更して、その分析を別のプロジェクトにプッシュすることにしました。突然、すべてがスムーズに進みました。