Jtest でプロジェクトを解析するには、Ant は特定の順序で次の処理を実行する必要があります。
- Parasoft ビルド リスナーを登録します。
- プロジェクトをコンパイルします。
- Jtest タスクを実行します。
静的解析の実行
コードに対して静的解析を実行するには、次の操作を行います。
- Jtest Plugin for Ant がセットアップ済みであることを確認します (「Jtest Plugin for Ant の設定」を参照)。
- 実行するターゲットに jtest タスクが設定されていることを確認します。
-listener
スイッチを使用してコマンド ラインに Parasoft リスナーを追加するか、ターゲットでjtest:listener
タスクを設定します。Ant でプロジェクトをビルドします。コマンドは次のようになります。
ant -lib PATH/TO/jtest-ant-plugin.jar -listener com.parasoft.Listener myTarget
上記のサンプルでは、コマンド ラインに Jtest Plugin for Ant が追加されていますが、JAR ファイルを Ant の lib ディレクトリにデプロイすることもできます(「初期セットアップ」を参照)。
単体テストの実行
Jtest レポートに単体テストの結果を含めるには、 jtest タスクおよび単体テスト用のビルトイン テスト コンフィギュレーション Unit Tests
を使用してテストを実行します。
- Jtest Plugin for Ant がセットアップ済みであることを確認します (「Jtest Plugin for Ant の設定」を参照)。
- テストを実行するターゲット以下が設定されていることを確認します:
- jtest タスク
- 単体テスト用のUnit Tests
ビルトイン テスト コンフィギュレーション -listener
スイッチを使用してコマンド ラインに Parasoft リスナーを追加するか、ターゲットでjtest:listener
タスクを設定します。Ant でプロジェクトをビルドします。コマンドは次のようになります (カバレッジの収集を省略するには、
jtest.coverage.skip
オプションを使用します)。
ant -lib PATH/TO/jtest-ant-plugin.jar -listener com.parasoft.Listener buildTestAnalyze -Djtest.coverage.skip=true
単体テストのカバレッジの収集
単体テスト実行時にカバレッジ情報を収集するには、 jtest およびagent タスクと単体テスト用のビルトイン テスト コンフィギュレーション Unit Tests
を使用してテストを実行します。
- Jtest Plugin for Ant がセットアップ済みであることを確認します (「Jtest Plugin for Ant の設定」を参照)。
- テストを実行するターゲット以下が設定されていることを確認します:
- jtest タスク
-Jtest agent タスクでラップされた junit タスク
- 単体テスト用のUnit Tests
ビルトイン テスト コンフィギュレーション -listener
スイッチを使用してコマンド ラインに Parasoft リスナーを追加するか、ターゲットでjtest:listener
タスクを設定します。Ant でプロジェクトをビルドします。コマンドは次のようになります。
ant -lib PATH/TO/jtest-ant-plugin.jar -listener com.parasoft.Listener buildTestAnalyze
agent
タスク
Jtest でカバレッジ データを収集する場合、Java エージェントを使用するのが推奨される方法です。(.class ファイルを変更せずに) 実行時バイトコードのインストゥルメンテーションを行うことができる agent タスクを適切なターゲットに設定します。次のサンプルは、必要なタスクを 1 つのターゲットで設定したビルド スクリプトを示しています。
<project name="agent-sample" default="buildTestAnalyze" xmlns:jtest="antlib:com.parasoft.jtest.plugin.ant"> <!-- ソース ディレクトリにテストとアプリケーションの両方のソース コードが含まれています。通常は、これらのソースは同じディレクトリには置かれません --> <property name="sources" value="src"/> <!-- クラスのディレクトリ --> <property name="classes" value="bin"/> <target name="buildTestAnalyze"> <!-- ソースのコンパイル --> <javac srcdir="${sources}" destdir="${classes}"/> <!-- バイトコードのインストゥルメント --> <!-- テストの実行 --> <jtest:agent> <!-- 次の属性がセットされる: haltonerror="no" haltonfailure="no" fork="yes" agent タスクがスキップされた場合、ネストされたタスクは構成を変更せずに実行される。--> <junit> <!-- formatter 要素は次のように設定される: <formatter type="xml"/> 別の formatter タイプが設定されている場合、上書きされる。 formatter がクラス名によって構成されている場合、そのままにされる。 --> <classpath> <pathelement location="${classes}"/> </classpath> <batchtest> <fileset dir="${classes}" includes="**/*Test.class"/> </batchtest> </junit> <coverage> <includes> <fileset dir="${classes}" /> </includes> <testIncludes> <include>**/*Test.class</include> </testIncludes> </coverage> </jtest:agent> <!-- 解析 --> <jtest:jtest/> </target> </project>
instrument
および instrument-test
タスク (非推奨)
instrument および instrument-test タスクを実行して単体テストのカバレッジを収集できます。これらのタスクは、テストを実行する前に .class ファイルをインストゥルメントします。次のサンプルは、必要なタスクを 1 つのターゲットで設定したビルド スクリプトを示しています。
<project name="offline-sample" default="buildInstrumentTestAnalyze" xmlns:jtest="antlib:com.parasoft.jtest.plugin.ant"> <!-- ソース ディレクトリにテストとアプリケーションの両方のソース コードが含まれています。通常は、これらのソースは同じディレクトリには置かれません。 --> <property name="sources" value="src"/> <!-- クラスのディレクトリ --> <property name="classes" value="bin"/> <target name="buildTestAnalyze"> <!-- ソースのコンパイル --> <javac srcdir="${sources}" destdir="${classes}"/> <!-- バイトコードのインストゥルメント --> <jtest:instrument> <fileset dir="${classes}"> <exclude name="**/*Test.class"/> </fileset> <!-- デフォルト値の場合、classpathRefId を指定する必要はありません。 <classpathRefId>jtest.classpath</classpathRefId> --> <!-- デフォルトでは、インストゥルメントされたバイトコードは、${classes} の内容を上書きします --> <destDir>${basedir}/parasoft/instrumented-classes</destDir> </jtest:instrument> <jtest:instrument-test> <fileset dir="${classes}"> <include name="**/*Test.class"/> </fileset> <!-- デフォルト値の場合、classpathRefId を指定する必要はありません。 <classpathRefId>jtest.classpath</classpathRefId> --> <!-- デフォルトでは、インストゥルメントされたバイトコードは、${classes} の内容を上書きします --> <testDestDir>${basedir}/parasoft/instrumented-classes</testDestDir> </jtest:instrument-test> <!-- fork オプションでテストを実行。これは、オフライン インストゥルメンテーションで必要。さもなければカバレッジは不完全または空になる可能性がある --> <junit haltonfailure="off" haltonerror="off" fork="yes"> <formatter type="xml" /> <classpath> <!-- destDir または testDestDir パラメーターが別のディレクトリを指している場合、 classpath から ${classes} を削除する必要があります <pathelement location="${classes}"/> --> <!-- classpath には、カバレッジの収集に必要なインストゥルメント済みバイトコードとライブラリがあります --> <path refid="jtest.classpath"/> </classpath> <batchtest> <fileset dir="${classes}" includes="**/*Test.class"/> </batchtest> </junit> <!-- analysis --> <jtest:jtest/> </target> </project>
アプリケーション カバレッジの収集
Jtest のカバレッジ エージェントを使用すると、実行中のアプリケーションでの手動テストまたは自動テスト実行時にカバレッジ データを収集できます。Jtest でのアプリケーション カバレッジの収集については「アプリケーション カバレッジ」を参照してください。
FAQ
どうすれば収集をすばやく無効にできますか?
以下のいずれかの方法でカバレッジを無効にできます。
instrument
およびinstrument-test
タスクの両方にskip
パラメーターを指定します。 そうすると、Jtest の実行はスキップされず、カバレッジの収集だけがスキップされます。Djtest.skip=true
プロパティを指定して Ant を実行します。- プロジェクト プロパティ <property name="jtest.skip" value="true"/>を追加します。 サブプロジェクトで Jtest タスクが設定されている場合、サブプロジェクトがこのプロパティを継承していることを確認してください。
instrument および instrument-test タスクを使用する場合、home パラメーターを複数の箇所で設定するのを避けるには、どうしたらよいですか?
- -Djtest.home=PATH/TO/JTEST プロパティを指定して Ant を実行します。
- プロジェクト プロパティ <property name="jtest.home" value="PATH/TO/JTEST"/>を追加します。 サブプロジェクトがこのプロパティを継承していることを確認してください (instrument または instrument-test タスクがサブプロジェクトで構成されている場合)。