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

■ EclEmma

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

https://www.howtopronounce.com/eclemma/

【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));
  }
}

参考文献

http://itpro.nikkeibp.co.jp/article/COLUMN/20071029/285773/?ST=develop&P=3
http://www.mitchy-world.jp/java/test/eclemma.htm

関連記事

Javaカバレッジツール ~ Cobertura 編 ~
https://dk521123.hatenablog.com/entry/2015/09/05/140100