【Eclipse】【Java】 カバレッジツール ~ EclEmma 編 ~

■ EclEmma

 * カバレッジツール
 * 読み方は?何エマ?「イーシーエル・エマ」?どこにも書いてない...
  => 以下のサイトの音声だと「エクレマ?」
https://www.howtopronounce.com/eclemma/

■ インストール方法

【1】手動インストール
【2】自動インストール

【1】手動インストール

 * 以下の参考文献を参考になる
http://plaza.rakuten.co.jp/parallellines/diary/201501220000/
手順
[1] 以下のサイトからEclEmma(今回は、「eclemma-2.3.2.zip」) をダウンロードする
http://www.eclemma.org/download.html
[2] ダウンロードしたファイルを解凍する
[3] 解凍したフォルダ「features」「plugins」を、eclipse内の「features」「plugins」に上書きする
[4] コマンドプロンプトを起動し、eclipse.exe まで移動し、「eclipse.exe -clean」でeclipseを起動させる

[例]~~~~~~~
cd C:\eclipse
eclipse.exe -clean
~~~~~~~~~

[5] 確認として、テストのフォルダを右クリックし、[Coverage As]-[JUnit Test]を選択
 => カバレッジが測定できたらOK

【2】自動インストール

[1] Eclipseを起動し、[Help]-[Eclipse Marketplace...]を選択
[2] 「Search」タブのFind欄に「EclEmma」を入力しEnterキー押下
[3] 「EclEmma Java Code Coverage 3.0.1」の「Installed」ボタン押下
参考文献
http://www.akjava.com/jp/eclipse/eclemma.html
http://javaworld.helpfulness.jp/post-66/
http://d.hatena.ne.jp/MoonMtLab/20130826/1377467826

■ 使い方

 * 緑色 : 実行された行
 * 赤色 : 実行されていない行
 * 黄色 : 十分に条件が満たされていない行

カバレッジに関するあれこれ

Enumカバレッジが100%にならない

 * package 部分が赤色になっている
サンプル
// テスト対象
package com.sample.enums; // ココが赤い (Coverage : 63.8%)

public enum ResultType {
  ERROR("E"),
  SUCCESS("S");
  
  private String code;
  private ResultType(String code) {
    this.code = code;
  }
  
  public String getCode() {
    return this.code;
  }
}

// テストコード
package com.sample.enums;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.junit.Test;

public class ResultTypeTest {
  @Test
  public void getCodeTest() {
    assertThat(ResultType.ERROR.getCode(), is("E"));
    assertThat(ResultType.SUCCESS.getCode(), is("S"));
  }
}
原因
 * values() と valueOf(String) のテストを行う必要がある。
 * 以下の参考文献が非常に役に立った
https://qiita.com/nmby/items/539a45122fde2578ee99
解決例
package com.sample.enums;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.junit.Test;

public class ResultTypeTest {
  @Test
  public void getCodeTest() {
    assertThat(ResultType.ERROR.getCode(), is("E"));
    assertThat(ResultType.SUCCESS.getCode(), is("S"));
  }

  // ★注目★
  @Test
  public void testValues() {
    assertThat(ResultType.values(),
        is(new ResultType[] { ResultType.ERROR, ResultType.SUCCESS }));
  }

  // ★注目★
  @Test
  public void testValueOf() {
    assertThat(ResultType.valueOf("ERROR"), sameInstance(ResultType.ERROR));
    assertThat(ResultType.valueOf("SUCCESS"), sameInstance(ResultType.SUCCESS));
  }
}


関連記事

カバレッジツール ~ Cobertura(コヴェルトゥーラ) ~

https://blogs.yahoo.co.jp/dk521123/35318328.html