web-dev-qa-db-ja.com

コードカバレッジが生成されても、Sonarはユニットテストの結果を取得しません

ローカルマシンで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
その結果、次の出力でターゲットディレクトリを取得しています。
Target output directory

sonar.Java.binariesに設定されているクラスディレクトリ:
enter image description here

sonar.Java.test.binariesに設定されているテストクラスディレクトリ:
enter image description here

Surefire JUnitテストは、sonar.junit.reportPathsに設定されているディレクトリを報告します。
enter image description here

JaCoCoレポート出力ディレクトリ:
enter image description here

ブロワーのJaCoCoHTMLレポート:
enter image description here

その後、いくつかの重要な(私はそう思います)出力の下でsonar-scanner.batを実行しています。
enter image description here
enter image description here

私のSonarWebインスタンスプロジェクト分析: enter image description here

そして、すべてが適切に生成されたように見えるので、なぜこれが起こっているのか本当にわかりません。昨日からStackOverflowですべてを試したと思うので、重複としてマークしないでください。
このプロジェクトのカバレッジメトリックにアクセスすると、100%単体テストに合格したことがわかるため、これはさらに奇妙です。
enter image description here

4
darekg11

さて、私はソナーのバグかもしれない何かを発見しました。

基本的に、このプロジェクトは基本的なmvn sonar:sonar構成で長い間Sonarにプッシュされてきました。それで、それはテスト結果さえしていませんでした。 Jenkins経由で実行したかったので、必要なすべてのフィールドをsonar-project.propertiesに入力し、Sonar-Runnerではなくmvn sonar:sonar経由でプッシュしました。

あなたが見ることができるようにそうした後、ユニットテスト品質ゲートは正当な理由もなく失敗していました。私の最新のスクリーンショットでは、実際にユニットテストが100.0%に合格したことがわかります。

projectKeyプロパティを別のプロパティに変更して、その分析を別のプロジェクトにプッシュすることにしました。突然、すべてがスムーズに進みました。

0
darekg11