よくある質問

Q. 行が部分的にカバーされた (イエロー・インディケーターで示された) となるのは、どのような場合ですか?

A. コード全体ですべてのブランチが実行されていない場合、部分的にカバーされた行として示されます。

以下は、2 つの例です。

  1. 例外ハンドラー

  2. try {
    methodA() // methodA throws Exception
    } catch (Exception e) {..}

    methodA を呼び出している行は、部分的にカバーされています。なぜなら、2 つのパスがあるためです。例外がスローされキャッチされるか、または、例外がスローされず正常にプログラムが処理されます。例外がスローされない場合、キャッチが絶対に実行されないので部分的な範囲が示されます。

  3. 共用コンストラクター・コード
  4. 上の例では、行 4 が部分的にカバーされた行としてマークされています。オブジェクト・インスタンスを作成するために、どちらのコンストラクターを使用してもインスタンス変数の初期化コードが実行されることに注目してください。 コンパイラーは、両方のコンストラクターに初期化コードを配置します。 つまり、上のコードは、次のコードとおおよそ等しいことになります。

    1 つのコンストラクターしか使用しないため、もう 1 つの実行パスは実行されず、部分的な範囲が示されます。

Q. コード・カバレッジ・レポートで、レポートされるパッケージの合計行が、パッケージのクラスの合計数といつも等しいわけではないのはなぜですか?

A. パッケージの合計行をレポートする場合、メソッド間で共用される行は除外され、重ねてカウントされません。

Q. クラス定義 (例えば、パブリック・クラス Foo {..}) がカバーされていない (レッド)、または部分的にカバーされて (イエロー) 表されるのはなぜですか?

A. クラスが明示的なデフォルト・コンストラクターを持っていない場合、コンパイラーはコンストラクターを 1 つ生成しますが、それは暗黙的なコンストラクターなので、コードの行に関連付けられる可能性があります。 また、静的初期化コード (例えば、static フィールド) が存在する場合、コンパイラーは行に関連付けられる静的初期化ブロックを生成します。

Q. パッケージ・エクスプローラーで、カバーされたパーセンテージが許容できるカバレッジ・レベルを超えているにも関わらず、カバレッジ・インディケーターが赤で表示されるのはなぜですか?

A. 複数の許容基準が設定される (例えば、メソッドとブロック) 場合、1 つでも基準を満たさないとインディケーターは赤く表示されます。 コード・カバレッジ properties を選択し、インディケーターとパーセンテージを使用可能化することによって許容基準を設定します。コード・カバレッジ設定を選択し、インディケーター (例えば、メソッド、ブロックなど) を使用可能化することによって、表示されたカバレッジ・インディケーターを設定します。 色は、設定ページではなく、プロパティー・ページを使用する基準設定によって決定されます。

Q. コード・カバレッジでカウントされない行はどれですか?

A. 以下のものが、カバーされた、カバーされない、部分的にカバーされたものとしてカウントされず、カバーされたパーセンテージを計算するために使用されません。

Q. ブロック・カバレッジのブロックとは何ですか?

A. 実行可能ユニットは、各基本ブロックの開始で、およびソース行番号が以前のバイトコードとは異なる各バイトコードで始まります。 基本ブロックは、分岐の始点および終点にならないバイトコード命令の領域です。 基本ブロックの最初の命令を実行すると、すべての命令が実行され、命令群が単一グループとみなされます。

基本ブロックは、ブランチ、呼び出し、スロー、およびリターンなどの命令で終わります。

Q. コード・カバレッジ使用可能アプリケーションをデバッグしていると、デバッガーが予想したメソッドではなく、llc_probe.class にステップインしてしまうのはなぜですか?

A. これは、コード・カバレッジ・データの収集の方法によって生じます。この問題に対処するには、ステップ・フィルターを使用する必要があります。