2012-06-08 12 views
5

EclEmmaが正しくインストールされていることを確認するための簡単なサンプルコードを書きました。私は100%のカバレッジを得ていません。理由を理解できません。強調表示は、クラス名と関係があることを示しています。ここに私のコードは、対応するJUnitテストで、だ、EclEmmaがそれを強調方法:EclEmmaカバレッジレーティングが100%未満のコードは完全にカバーできますか?

Arithmetic class

Tests for Arithmetic class

カバレッジの結果は、両方の実際の方法は思えにもかかわらず、Arithmeticで3つの命令が打たれていないことを示しています私はthe EclEmma documentation about basic block coverageを読んだ

Coverage information

が、私はよ:完全に覆われますまだ混乱しています。どの基本ブロックが見逃されているのかよく分かりません。最初は、EclEmmaがクラスのバイトコードを無視している可能性があると考えましたが、ArithmeticTestはうまく処理されているようです。

私は2つの密接に関連した質問がある:

  1. これは私がEclEmmaに構成/インストール方法に問題があることを示していますか?
  2. 完全にカバーされたコードのEMMAカバレッジレーティングは100%高いが、そうであれば、どのように機能するのですか?

答えて

9

あなたのコードが正しくエマによってタグ付けすることができないデフォルトのコンストラクタを、意味だと思いますテキストブロックがありません。

テキストブロック内に正しくタグ付けされていないため、Emmaはカバレッジログをテキストファイルに関連付けることができません。いくつかのバイトコードを実行したので、行ログを登録できなかったためです。後で報告要素が行ロギングを読み取ると、デフォルトのコンストラクタの行番号を見つけることができず、クラス宣言行であるソートが意味を成す唯一の場所でエラーを強調表示します。

デフォルトコンストラクタは

スーパー Objectを構築します暗黙の最初の命令である
public Arithmetic() { 
    super(); 
} 

のように見えます。その存在を省略してもかまいませんが、コンパイラはそれをあなたのために追加します。それは1つの代わりに "3行"を得る場所です。

+0

実際には、「テキストのブロック」があります。ただ空です。バイトコードでは、デフォルトのコンストラクタがEclEmmaによって赤でマークされた行にあります。それをカバーして緑色で表示させるには、コンストラクタを呼び出すだけでよい: 'new Arithmetic()'。もちろん、ここでの正しいことは、クラス内に 'private'デフォルトのコンストラクタを宣言することです。 –

2

IIRCの場合、クラスのインスタンスをインスタンス化して、言語提供コンストラクタを実行する必要があります。

4

私はそれので、あなたprivateを同様Arithmeticのインスタンス化をテストする必要があり、またはそのコンストラクタを宣言するか、インスタンスを禁止する

+1

ああ、コンストラクタをテストしています。 EclEmmaは私的なコンストラクタではあまり幸せではありませんが、私はどこかで回避策を見て覚えていると思います。 – Pops

関連する問題