0

オーケー、エマは私を殺しています。私はすでにこれに2日を費やしました。

エマには現在2つの問題があります

  1. 単体テストで部分的にクラッシュする
  2. クラス スタンプの不一致に関する苦情です。: com.vladium.emma.EMMARuntimeException: [CLASS_STAMP_MISMATCH] runtime version of class xxx in the coverage data is not consistent with the version of this class in the metadata, possibly because stale metadata is being used for report generation.

私はクラッシュに耐えることができますが、頻繁にしか発生しませんが、修正するつもりはありません。

INSTRUMENTATION_RESULT: shortMsg=プロセスがクラッシュしました。[実行] INSTRUMENTATION_CODE: 0

ただし、カバレッジの結果を見るのは好きです。

私が試してみました:

  1. デバイスをきれいにする
  2. ワークスペース全体を一掃しました(Jenkinsで)
  3. コマンド プロンプトを使用する (jenkins、ant clean、ant emma debug install test をバイパスする)

このエラーについての私の理解は、apk がインストールされ、ユニット テスト中にさまざまなバイナリが含まれているため、そのメタデータ情報が、生成された coverage.em で古くなっているということです。

私の場合、これが不可能であることを確認できます. 今の私には意味がありません。

助けてください〜

Android sdk r16、NDK 5c、および Ant と Emma のデフォルト設定を使用しています。

4

2 に答える 2

0

Android用のEMMAを使用しているときにも、この問題に遭遇しました。これは、SDカードから取得したcoverage.ecがcoverage.emと一致していないためです。プロジェクトのインストルメント化されたバージョンを再構築してみてください。次の手順を試してください。

  1. アリクリーンリリース
  2. 蟻の楽器
  3. アリのインストール
  4. adb プル /mnt/sdcard/coverage.ec
  5. カバレッジ レポートを生成するには、coverage.em (ステップ 2 でプロジェクトの bin フォルダーに新しく生成されたもの) と coverage.ec を使用します。

詳細については、 EMMA for Androidを参照してください。

于 2014-11-10T08:24:30.137 に答える
0

Android プロジェクト (JNI 経由でネイティブ コードのサードパーティ ライブラリを使用) でまったく同じ問題が発生しています。この場合、EMMA エラー メッセージは少し誤解を招くことがわかります。これは、ホスト上で静的に生成されたカバレッジ メタデータ (coverage.em) が、デバイス上でアプリケーションの実行時に収集されたカバレッジ データ (coverage.ec) と一致しないためにトリガーされます。実はただの「不一致」ではなく、coverage.ec が完全に欠落しています。これは、ネイティブ コードでのクラッシュが原因です。Android では、ネイティブ コードでのクラッシュにより、関連する Java プロセスもシャットダウンされ、実際には VM が再起動されます。これは、EMMA も強制終了されたことを意味し、coverage.ec ファイルをディスクにフラッシュする機会がなくなったため、欠落しています。

クラッシュの前にEMMAがcoverage.ecファイルをより頻繁にフラッシュすることが理にかなっているのかどうか疑問に思っていましたが、不完全なカバレッジ情報がどれほど価値があるかは疑問です.

  1. ファイル形式はおそらく、段階的に解析するのが理にかなっている方法で構築されていません。
  2. 部分的なcoverage.ecはまだ完全なcoverage.emと一致しません。
  3. 部分的な coverage.ec から生成されたカバレッジは、スイート内のすべてのテストに関して間違ったカバレッジを報告します。

要するに、これに対処する最善の方法は、ネイティブ コードがクラッシュしないように修正することです。

于 2012-09-17T12:00:41.687 に答える