web-dev-qa-db-ja.com

実際にクラスをカバレッジ自体から除外せずに、EclEmmaのカバレッジ計算からクラスを除外する方法

EclEmmaを使用して、シナリオテストのカバレッジをテストし、プロジェクトのユースケーステストを行います。最も一般的なクラスとユースケーステストを含むBaseパッケージがあります。カバレッジは次のようになります。

Code coverage in our project

私が望むのは、カバレッジ計算からユースケーステスト(BugReportTestなど)を除外することです。しかし、その中のテストを考慮したいのです。クラス全体をカバレッジから除外する方法は知っていますが、それを行うと、コードのどの行がテストされているかを確認する実際のテストが忘れられるため、カバレッジが低下します。これらのユースケーステストは、プライバシー上の理由からベースパッケージにとどまる必要があります。

11
Programmer1994

技術的な理由により、コードカバレッジ分析から特定のクラスを除外する必要がある場合があります。次のオプションは、分析から特定のクラスを除外するようにカバレッジエージェントを構成します。パフォーマンスの最適化またはテクニカルコーナーの場合を除き、これらのオプションは通常必要ありません。

  1. Excludes:実行分析から除外する必要があるクラス名のリスト。リストのエントリはcolon (:)で区切られ、wildcard characters (* and ?). (Default: empty)を使用できます

  2. Exclude classloaders:実行分析から除外する必要のあるクラスローダー名のリスト。リストのエントリはcolon (:)で区切られ、wildcard characters (* and ?)を使用できます。このオプションは、JaCoCoコードインストルメンテーションと競合する特別なフレームワーク、特にJavaランタイムクラスにアクセスできないクラスローダー)の場合に必要になることがあります。(Default: Sun.reflect.DelegatingClassLoader)

警告:これらのオプションは注意して使用してください!無効なエントリは、コードカバレッジランチャーを破損する可能性があります。また、これらのオプションを使用して分析の範囲を定義しないでください。 除外されたクラスはまだカバーされていないとして表示されます。

リソースリンク:

  1. EclEmmaコードカバレッジ設定

次の例はすべて、同じ包含/除外パターンのセットを指定しています。

  1. <filter includes="com.foo.*" excludes="com.foo.test.*, com.foo.*Test*" />
  2. <filter includes="com.foo.*" /> <filter excludes="com.foo.test.*, com.foo.*Test*" />
  3. <filter value="+com.foo.*, -com.foo.test.*, -com.foo.*Test*" />
    <filter excludes="com.foo.*Test*" file="myfilters.txt" />
    myfilters.txtファイルには次の行が含まれます。

    -com.foo.test.* +com.foo.*

リソースリンク:

  1. カバレッジフィルター
  2. すべてのクラスが-g(debug = 'true')でビルドされていることは確かですが、EMMAはまだデバッグ情報の欠落について文句を言います!

EclEmmaの単体テストのコードカバレッジを無視

Preferences->Java->Code Coverageおよび"Only path entries matching"オプションをsrc/main/Javaに設定-うまく機能しているようです

11
SkyWalker