5

EclEmma が正しくインストールされていることを確認するために、簡単なサンプル コードをいくつか書きました。100% のカバレッジが得られていません。その理由がわかりません。強調表示は、それがクラス名に関係していることを意味します。EclEmma が強調表示した方法で、対応する JUnit テストを含む私のコードを次に示します。

算数クラス

算術クラスのテスト

カバレッジの結果はArithmetic、実際のメソッドは両方とも完全にカバーされているように見えますが、 の 3 つの命令がヒットしていないことを示しています。

取材情報

基本的なブロック カバレッジに関する EclEmma のドキュメントを読みましたが、まだ混乱しています。どの基本ブロックが欠落しているのかわかりません。最初は、EclEmma がクラスのバイトコードを無視しているだけかもしれないと思っていましたが、ArithmeticTest問題なく処理されているようです。

密接に関連する 2 つの質問があります。

  1. これは、EclEmma のインストール/構成方法に問題があることを示していますか?
  2. 完全にカバーされたコードの EMMA カバー率が高くても 100% とは言えないのは正常/許容できるものですか? もしそうなら、それはどのように機能しますか?
4

3 に答える 3

10

あなたのコードは、テキストのブロックがないため、エマが適切にタグ付けできないデフォルトのコンストラクターを暗示しています。

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

デフォルトのコンストラクタは次のようになります

public Arithmetic() {
  super();
}

スーパーは、構築する暗黙の最初の命令Objectです。その存在を省略してもかまいませんが、コンパイラはそれを追加します。ここで、1 行ではなく「3 行」になります。

于 2012-06-08T15:31:07.147 に答える
4

Arithmeticのインスタンス化もテストするか、コンストラクターを宣言してprivateインスタンス化を禁止する必要があると思います

于 2012-06-08T15:30:43.110 に答える
2

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

于 2012-06-08T15:30:27.693 に答える