EMMA
EMMA 統合ノート
EMMA でカバレッジを収集する場合、次の手順が実行されます。
1\. 各コンパイルステップ (javac/javac2 を使用) の後、ビルドエージェントは EMMA を呼び出して、コンパイルされたクラスをインストルメントし、ソースファイルの場所を保存します。 その結果、クラスメタデータを含む カバレッジ.em ファイルがビルドチェックアウトディレクトリに作成されます。 収集された Java ファイルのソースパスは、最終的な HTML レポートを生成するために使用されます。
2\. テスト実行。 この段階では、実際の実行時カバレッジ情報が収集されます。 このプロセスにより、 カバレッジ.ec ファイルが作成されます。 テストタスクが複数ある場合は、データが カバレッジ.ec に追加されます。
3\. レポート生成。 ビルドが終了すると、TeamCity は HTML カバレッジレポートを生成し、レポートを含む カバレッジ.zip ファイルを作成してサーバーにアップロードします。 また、 カバレッジ.txt ファイル内の概要レポートと元の カバレッジ.e(c|m) ファイルを生成してアップロードし、IntelliJ IDEA 用 TeamCity プラグインからカバレッジを表示できるようにします。
EMMA によるカバレッジの構成
EMMA エンジンを使用してコードカバレッジを構成するには、次の手順を実行します。
ビルド構成を作成 / 編集している間、 ビルドステップ ページに移動します。
Ant ビルドランナーを選択します。
コードカバレッジ セクションで、ドロップダウンメニューのカバレッジツールとして EMMA を選択します。
カバレッジオプションをセットアップします - 以下の利用可能なオプションの説明を参照してください。
オプション | 説明 |
|---|---|
カバレッジデータにソースファイルを含める | ソースファイルをコードカバレッジレポートに含めるには、このオプションをオンにします(Web でソースを表示できます)。 |
カバレッジ計測パラメーター | このフィールドを使用して、コードカバレッジレポートの作成に使用するフィルターを指定します。 これらのフィルターは、インスツルメンテーションから除外されるクラスを定義します。 フィルターの詳細な説明については、 EMMA のドキュメント(英語)を参照してください。 |
トラブルシューティング
カバレッジがありません。メッセージ: EMMA: 出力が作成されませんでした: メタデータが空です
すべてのクラス(カバレッジが評価される)がビルド中に再コンパイルされることを確認してください。 通常、これにはビルドの開始時に「クリーン」タスクを追加する必要があります。
java.lang.NoClassDefFoundError: com/vladium/emma/rt/RT
このメッセージは、ビルドが実行時に EMMA インストルメント化されたクラスファイルをロードし、クラスパスに emma.jar ファイルが見つからない場合に表示されます。 JUnit や TestNG などのテストタスクの場合、TeamCity は emma.jar をクラスパスに自動的に追加します。 ただし、他のタスクの場合はそうではなく、ビルドスクリプトを変更するか、インストルメンテーションから一部のクラスを除外する必要がある場合があります。
ビルドが独自のコンパイル済みクラスを使用する java タスクを実行する場合、 emma.jar を java タスクのクラスパスに追加するか、java タスクで使用されるクラスがインスツルメントされないようにする必要があります。 また、 フォーク=true 属性を使用して java タスクを実行する必要があります。
対応する emma.jar ファイルは buildAgent/plugins/coveragePlugin/lib/emma.jar から取得できます。 典型的なビルドの場合、対応するインクルードパスは ../../plugins/coveragePlugin/lib/emma.jar になります。
クラスをコンパイルから除外するには、EMMA インストルメンテーションタスクの設定を使用します。 TeamCity UI には、これらのパラメーターを EMMA に渡すフィールドがあり、"カバレッジ計測パラメーター" というラベルが付いています。 一部のパッケージをインスツルメンテーションから除外するには、次の構文を使用します: -ix -com.foo.タスク.*,+com.foo.*,-*Test* パッケージ com.foo.タスク.* にはカスタムタスクのファイルが含まれます。
EMMA カバレッジの結果が不安定です
junit タスクに フォーク=true 属性があることを確認してください。 推奨される属性の組み合わせは フォーク=true フォークmode=once です。