1

私はstackoverflowに関するさまざまな記事と回答をしばらく見てきましたが、私の場合の有効な解決策をまだ見つけていません。jacoco、maven、およびソナーがすべて一緒になってレポートを作成する方法についての私の理解には間違いなく何か問題があるので、助けを求めるつもりです。

次の構造を持つマルチモジュールのmavenプロジェクトがあります(少し簡略化されています):

root-folder/
├── module1/
│   ├── module1_1/
│   ├── module2_2/
├── module2/
│   ├── module2_1/
│   └── module2_2/
├── module3/
│   ├── module3_1/
│       ├── module3_1_1/
│   └── module3_2/
│   └── module3_3/
│   └── module3_4/
├── parent/
├── itest/
│   ├── itest_helper1/
│   └── itest_helper2/
│   └── actual_tests/
├── module4/

少し拡大させてください。親モジュールは、依存関係全体とそのバージョンを含む単なる pom です。この pom は、level1 の他のすべてのモジュール (ルートの直下) の親として使用されます。たとえば、モジュール 3_1_1 には親 module3_1/pom があり、これには親/pom があります。モジュールを他のプロジェクトに公開するために使用されるため、除外した機能モジュールもありますが、これは私の場合は役に立ちません。

すべてではありませんが、ほとんどのモジュールには、junit フレームワークを使用した単体テストがあります。統合テストは、いくつかのヘルパー サブモジュールと実際の ITests クラスを含むサブモジュールを持つ別のモジュールにあります。私のアイテムはプロジェクト全体のコードをカバーしているため、他のすべてのモジュールのコードをテストします。

私のルート pom には、基本的に osgi コンテナー、Web サービスであり、サードパーティの依存関係を処理する内部フレームワークも親として含まれています。

ソナー バージョン 5.6 を使用していますが、統合テストのレポートを作成できませんでした。また、モジュール/クラスごとにドリルダウンしてテストカバレッジを表示できるように、それらがマージされることを願っています。さまざまなオプションとセットアップを試しましたが、最新の試みでは、root-folder/pom.xml に次のものが含まれています。

 <!-- properties section-->
  <properties>
        <jacoco.version>0.7.2.201409121644</jacoco.version>
        <sonar.language>java</sonar.language>
        <sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
        <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
        <jacoco.outputDir>${project.build.directory}</jacoco.outputDir>
        <jacoco.out.ut.file>jacoco-ut.exec</jacoco.out.ut.file>
        <sonar.jacoco.reportPath>${jacoco.outputDir}/${jacoco.out.ut.file}</sonar.jacoco.reportPath>
        <jacoco.out.it.file>jacoco-it.exec</jacoco.out.it.file>
        <sonar.jacoco.itReportPath>${jacoco.outputDir}/${jacoco.out.it.file}</sonar.jacoco.itReportPath>
    </properties>

<!-- plugins section-->
<profiles>
        <profile>
            <id>coverage</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.ut.arg}</argLine>
                            <!-- test failure ignore -->
                            <testFailureIgnore>true</testFailureIgnore>
                            <includes>
                                <include>**/*Test*</include>
                            </includes>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <argLine>-Xmx1024m -XX:MaxPermSize=256m ${jacoco.agent.it.arg}
                            </argLine>
                            <!-- Let's put failsafe reports with surefire to have access to tests
                                failures/success reports in sonar -->
                            <reportsDirectory>${project.build.directory}/surefire-reports
                            </reportsDirectory>
                            <includes>
                                <include>**/*IT*</include>
                            </includes>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>${jacoco.version}</version>
                        <executions>
                            <!-- Prepares a variable, jacoco.agent.ut.arg, that contains the info
                                to be passed to the JVM hosting the code being tested. -->
                            <execution>
                                <id>prepare-ut-agent</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <destFile>${sonar.jacoco.reportPath}</destFile>
                                    <propertyName>jacoco.agent.ut.arg</propertyName>
                                    <append>true</append>
                                </configuration>
                            </execution>
                            <!-- Prepares a variable, jacoco.agent.it.arg, that contains the info
                                to be passed to the JVM hosting the code being tested. -->
                            <execution>
                                <id>prepare-it-agent</id>
                                <phase>pre-integration-test</phase>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <destFile>${sonar.jacoco.itReportPath}</destFile>
                                    <propertyName>jacoco.agent.it.arg</propertyName>
                                    <append>true</append>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <!-- Integraton tests -->
        <profile>
            <id>run-its</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>integration-test</id>
                                <phase>integration-test</phase>
                                <goals>
                                    <goal>integration-test</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>verify</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

プロジェクトを mvn -Pcoverage,run-its clean install sonar:sonar で実行します。私の単体テストは、完全なカバレッジと成功率で問題ないようです。正直なところ、私は統合テストにのみ興味がありますが、単体テストはセットアップが非常に簡単なので、それらも追加しました。私の統合テスト レポートでは、実際には it モジュールのカバレッジが報告されていますが、これは報告されるべきではない唯一のモジュールです。プロジェクト全体のカバレッジをレポートするアイテムが必要です。

私のitestモジュールで実行されているソナーのjacoco部分は次のとおりです。

    [WARNING] You are not using the latest JaCoCo binary format version, please     consider upgrading to latest JaCoCo version.
[INFO] Analysing  D:\Home\project\root\itest\testcase\target\jacoco-it.exec
[WARNING] You are not using the latest JaCoCo binary format version, please consider upgrading to latest JaCoCo version.
[INFO] Analysing D:\Home\project\root\itest\testcase\target\sonar\jacoco-overall.exec
[INFO] No information about coverage per test.

また、私のプラグイン構成は非常にルートの pom にあるため、すべてのモジュール (単体テストを持たないものを含む) のレポートを分析しようとし、ソナー実行ログにエラーをスローしますが、そうではないと思います問題。ヘルプが必要な場合は、詳細をお尋ねください。ありがとう。

4

1 に答える 1