アグリゲータである Jtest Plugin は、ビルド中に 1 回だけ実行される必要があります。 コマンドラインから直接 jtest ゴールを実行するか、レポート プラグインとして実行することを推奨します。

解析の前にプロジェクトのビルドを実行することは必須ではありません。しかし、複数モジュールからなるプロジェクトの場合は、事前にコンパイルすることを推奨します。そうすると、Jtest はローカル リポジトリの成果物を使用できるため、コードのテストおよび解析にかかる時間を短くできます。

Maven での解析とカバレッジ情報の収集を行う前に、Jtest ライセンスが適切に設定されていることを確認してください (「ライセンスの設定」を参照)。

静的解析の実行

コードに対して静的解析を実行するには、次の操作を行います。

  1. Jtest Plugin for Maven がセットアップ済みであることを確認します (「Jtest Plugin for Maven の設定」を参照)。
  2. jtest:jtest ゴールを実行します。コマンドは次のようになります。

    mvn jtest:jtest

    Jtest Plugin for Maven は、.json ファイルから必要なビルド データを収集し、指定した設定に従ってコードを解析します (「Configuring Jtest Execution」を参照)。

  3. 解析結果を参照します (「結果の参照」を参照)。

Jtest が Maven テスト スコープの依存関係のインポートに関するコンパイルの問題をレポートした場合、mvn test コマンドで  jtest:jtest ゴール を実行してください。

mvn test jtest:jtest

単体テストの実行

Jtest レポートに単体テストの結果を含めるには、 jtest:jtest ゴールおよび単体テスト用のビルトイン テスト コンフィギュレーション Unit Tests  を使用してテストを実行します。

Jtest Maven Plugin が構成されていることを確認します。

  1. Jtest Plugin for Maven がセットアップ済みであることを確認します (「Jtest Plugin for Maven の設定」を参照)。
  2. Maven で jtest:jtest ゴールを実行します。コマンドは次のようになります。

    mvn clean test jtest:jtest -Djtest.config="builtin://Unit Tests"


単体テストのカバレッジの収集


単体テスト実行時にカバレッジ情報を収集するには、 jtest:jtest および jtest:agent ゴールと単体テスト用のビルトイン テスト コンフィギュレーション Unit Tests  を使用してテストを実行します。

  1. Jtest Plugin for Maven がセットアップ済みであることを確認します (「Jtest Plugin for Maven の設定」を参照)。
  2. Maven で jtest:agent および jtest:jtest ゴールを実行します。コマンドは次のようになります。jtest:agent ゴールの実行前にテストおよびクラスがコンパイルされている必要があります。コマンドは次のようになります。

    mvn clean test-compile jtest:agent test jtest:jtest -Djtest.config="builtin://Unit Tests"

(info) クラスがコンパイルされる前に jtest:agent ゴールを実行すると、カバレッジが空になる場合があります。Tycho plugins や他のデフォルトのライフサイクルには含まれないプラグインを使用する場合、専用の (デフォルトではない) コンパイラを呼び出し、クラスが適切にコンパイルされ、カバレッジ情報が収集されるようにします。コマンドは次のようになります。

mvn clean tycho-compiler:compile jtest:agent verify jtest:jtest -Djtest.config="builtin://Unit Tests"

jtest:agent ゴール


jtest:agent ゴールは、ビルド モジュールに基づいて Jtest エージェント設定を生成し、 initialize  フェーズで "agentPropertyNames" で指定されたプロパティ ファイルの javaagent VM 引数を設定します。

デフォルトでは、特定のプロパティによって maven-surefire-plugin および eclipse-test-plugin  に javaagent VmArg をインジェクトします。

Maven テスト プラグインで ゴールを使用するための前提条件は以下のとおりです。

  1. テストはフォークされたプロセスで実行する必要があります (forkCount、forkMode などのパラメーター)
  2. 追加の VmArgs には、Jtest Java agent VmArgs (argLine パラメーター) が含まれていなければなりません。

jtest:agent ゴールは、(argLine および tycho.testArgLine によるデフォルト値から) VmArgs パラメーター プロパティをセットアップすることで Maven テスト プラグイン (maven-surefire-plugin および tycho-surefire-plugin) を自動的に設定します。これらのパラメーターのデフォルト値を変更する必要がある場合は、以下のいずれかの方法で変更します。

  1. デフォルト プロパティを使用します。jtest:agent ゴールは Jtest のjavaagent VmArg を使用してプロパティを拡張します。

    <project>
      <!-- ... -->
      <properties>
        <!-- Jtest:agent ゴールによって拡張される argLine プロパティ --->
        <argLine>-Xmx=1024m -XX:MaxPermSize=256m</argLine>
      </properties>
      <!-- ... -->
      <build>
        <plugins><!-- または pluginManagement -->
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <forkCount>1</forkCount>
              <!-- ここでは argLine パラメーターを設定しない -->
            </configuration>
          </plugin>
        </plugin>
      </build>
    </project>
  2. インジェクトされたカスタム プロパティによるパラメーター値を使用します。

    <project>
      <!-- ... -->
      <build>
        <plugins>
          <plugin>
            <groupId>com.parasoft.jtest</groupId>
            <artifactId>jtest-maven-plugin</artifactId>
            <configuration>
              <!-- jtest:agent ゴールは、以下のプロパティに Jtest Java agent VmArg を設定する --> 
              <agentPropertyNames>jtest.argLine</agentPropertyNames>
              <!-- オフライン カバレッジと同じパラメーターを設定するオプションのカバレッジ ブロック -->
              <coverage>
                <!-- ... -->
              </coverage> 
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>${jtest.argLine} -Xmx=1024m -XX:MaxPermSize=256m</argLine>
            </configuration>
          </plugin>
        </plugin>
      </build>
    </project>

jtest:instrument ゴール (非推奨)


 jtest:instrument ゴールを実行して単体テストのカバレッジを収集できます。 jtest:instrument ゴールは、テスト実行の前に (process-test-classes フェーズで) ファイルをインストゥルメントします。コマンドは次のようになります。

mvn clean test-compile jtest:instrument test jtest:jtest -Djtest.config="builtin://Unit Tests"

カバレッジをレポートするには、おおもとのレポート スコープが、インストゥルメント スコープよりも範囲が広くなければなりません。レポート スコープは resource  パラメーターでカスタマイズできます。デフォルトではすべてがスコープに含まれます。

<project>
  <!-- ... -->
  <build>
    <!-- ... -->
    <plugins>
      <!-- ... -->
      <plugin>
        <groupId>com.parasoft.jtest</groupId>
        <artifactId>jtest-maven-plugin</artifactId>
        <configuration>
          <includes><!-- レポート スコープの構成 -->
            <!-- report coverage for all files in specified package -->
            <include>**/my/package/*</include>
          <includes>
          <coverage>
            <excludes>
              <!-- クラスのインストゥルメントの除外 -->
              <exclude>**/AnnotationProcessor.class</exclude>
            </excludes>
            <testExcludes>
              <!-- テスト クラスのインストゥルメントの除外 -->
              <exclude>**/*Util.class</exclude>
            </testExcludes>
          </coverage>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

jtest:instrument ゴールを使用したオフライン インストゥルメントは、バイトコードやビルド成果物の破損につながるおそれがあるため、jtest:agent ゴールを使用してカバレッジを収集することを推奨します。

設定のガイドライン


  1. 再コンパイル時にインストゥルメントされたクラスが上書きされるのを防ぐため、コマンド ラインに -Dmaven.compiler.useIncrementalCompilation=false を追加してインクリメンタルなコンパイルを無効にします。この方法が可能なのは、バージョン 3.1 以降であるため、バージョン 3.0 のユーザーはバージョンをアップグレードする必要があります。maven-compiler-plugin (バージョン 3.0 以降) のバグにより、再コンパイルすると、インストゥルメントされたクラスが上書きされます。
  2. コードをインストルメントする他のプラグイン (aspectj など) をビルドで使用する場合、process-classes フェーズでJtest Plugin for Maven を実行する必要があります。それには、POM ファイルで明示的にJtest Plugin for Maven の実行を指定します。
  3. <build>
      <!-- ... -->
      <plugins>
        <!-- コードをインストゥルメントする他のプラグイン --> 
        <plugin>
          <groupId>com.parasoft.jtest</groupId>
          <artifactId>jtest-maven-plugin</artifactId>
          <executions>
            <execution>
              <goals>
                <goal>instrument</goal>
              </goals>
              <phase>process-classes</phase>
            </execution>
          </executions>
        </plugin>
        
      </plugins>
    </build> 
  4. プロジェクトにアノテーション プロセッサが定義されており、それを使用してコンパイル済みクラスを変換している場合、そのクラス (またはアノテーション プロセッサを含むモジュール) をインストゥルメンテーションから除外する必要があります。詳しい方法については、jtest:instrumentexcludes の設定に関するセクション (モジュール全体をスキップする必要がある場合は skip ) を参照してください。

アプリケーション カバレッジの収集


Jtest のカバレッジ エージェントを使用すると、実行中のアプリケーションでの手動テストまたは自動テスト実行時にカバレッジ データを収集できます。Jtest でのアプリケーション カバレッジの収集については「Application Coverage」を参照してください。


  • No labels