*

JUnit入門その8[Eclipse4.4のJUnitプラグインのテストケースのカバレッジをEclEmmaを利用して測定してみる]

公開日: : 最終更新日:2016/12/05 Eclipse, Java, JUnit


スポンサードリンク



今回は「EclEmma」を使って、テストのカバレッジの測定を行うエントリーとなります。
「djUnit」をと思ったのですが、「djUnit」は開発が止まってから長く経っており、かつJDK8ではデフォルトでは動作しないため、「EclEmma」にいたしました。

JUnit入門その3[Eclipse4.4のJUnitプラグインとMockフレームワークのJMockitの併用の基本]
ではJMockitの説明をさせていただきましたので、「jmockit-coverage」をとも思ったのですが、
先に「EclEmma」の説明をさせていただきます。

近いうちに「jmockit-coverage」を扱った別エントリーを作成する予定です。

本エントリーの内容は以下の通りです。

  1. テストのカバレッジとは?
  2. 「EclEmma」の概要説明
  3. 「EclEmma」を利用したカバレッジの測定方法


1 テストのカバレッジとは?

ユニットテストのテストケースの実装方針

JUnit等のユニットテストフレームワークを用いてテストを実装する場合は、本質的には、ホワイトボックステストの観点のテストを実装する必要があり、ガバレッジは100%が理想です。

とは言え、様々な制約により、テストが実装できないロジック、もしくは実装しても費用対効果が薄いロジック等も存在します。
(StrutsのActionクラス等)

このような背景からユニットテストは、ホワイトボックスとブラックボックスの中間的な、グレーボックステストとして実装されるべきとの主張がとなえられています。

ユニットテストのテストケースの妥当性の検証

ホワイトボックス、グレーボックスに関わらず、テストケースがテスト対象のロジックの品質を担保しているかを判断する必要があります。

最終的には、ユニットテストと対象ロジックのコードのレビューとなるのですが
(実際には、あまりやれていないのが現状かもしれませんが・・・)
何もない所からこの作業を行うと、大きな労力がかかります。

カバレッジツールを用いると、この労力を大幅に縮小できます。

カバレッジツールを用いることで、テスト対象のロジックのコードのどの部分がテストされていて、どの部分がテストされていないかがグラフィカルに表示されます。

同時に、カバレッジ(テスト網羅率)も表示されます。

カバレッジツールは大変便利な物であることは疑いない事実ではありますが、数値はあくまでも参考値であり、
ユニットテストと対象ロジックのコードのレビューを行う時の手助けとなるものとご認識ください。

2 「EclEmma」のインストールと概要説明

「EclEmma」のインストール

まずは、「EclEmma」のインストール方法を説明させていただきます。

Eclipseのマーケットプレースでインストール可能ですので、特にハマりどころはございませんが・・・

Eclipseのメニューの[ヘルプ]>[Eclipse マーケットプレース…]をクリックします。
スクリーンショット 2015-04-17 19.15.57

「Eclipseマーケットプレース」画面が表示されますので、検索欄に「EclEmma」と入力後に「実行」ボタンをクリックします。
スクリーンショット 2015-04-17 19.16.24

検索結果が表示されますので、「インストール」ボタンをクリックします。
EclEmma検索後の画面

選択された「フィーチャー」の確認画面が表示されますので、「確認>」ボタンをクリックします。
EclEmma確認の画面

「使用条件の条項に同意します」のラジオボックスを選択し、「完了」ボタンをクリックします。
EclEmmaライセンスレビュー画面

これで実際のインストールが開始されます。
EclEmmaのインストール中画面

インストール完了には再起動が必要となります。Eclipseの再起動の確認プロンプトが表示されますので、「はい」ボタンをクリックします。
EclEmmaのインストール後の再起動確認

再起動が完了すれば「EclEmma」のインストールは完了です。

インストールが完了すると、Eclipseのメニューの[ウインドウ]>[ビューの表示]>[その他…]
スクリーンショット 2015-04-17 21.03.57

の[Java]>[カバレッジ]で「EclEmma」のビューが表示可能となります。

「EclEmma」の概要説明

先ほどから説明させていただいている通り、「JUnit」を利用して作成したユニットテストにおける、テスト対象ロジックのカバレッジ(テスト網羅率)を計測するツールとなります。

カバレッジの計測方法

「JUnit」テストクラスの定義部分にマウスカーソルを当てた状態で、右クリックメニューの[カバレッジ]>[JUnitテスト]をクリックします。
カバレッジの計測方法

テストでどのコードが実行されたかの確認がエディタエリアで行えます。
実行された行は緑色
実行されていない行は赤色
複数条件で実行されなければならない箇所、かつ十分に条件が満たされていないところは黄色となります。
カバレッジの実行行確認

イマイチ黄色になる条件ですが曖昧ですが・・・

クラス毎のガバレッジは「ガバレッジ」ビューで確認できます。
スクリーンショット 2015-04-18 21.18.13

カバレッジの構成

カバレッジを測定する際の各種設定を行った後に、カバレッジを測定することが可能です。

右クリックメニューの[カバレッジ]>[カバレッジの構成…]をクリックします。
カバレッジの構成

以下の画面が表示されます。普通のmain関数を保持するjavaのクラスを実行する際の「実行の構成」の考え方と良く似ていますが、当然ですが、設定可能な値は多いです。
スクリーンショット 2015-04-18 21.35.24

以下ではよく利用する項目の説明をさせていただきます。

・実行するテスト
単一テストのテスト対象の選択(テストメソッドも指定可能、もしくは選択されてたプロジェクトやパッケージ等に含まれる全てのテストクラスを実行するテストとして指定可能です。

・テスト・ランナー
「JUnit3」と「JUnit4」が選択可能です。
スクリーンショット 2015-04-19 17.44.45

・カバレッジの対象となるソースフォルダ
カバレッジの取得対象となるソースフォルダを指定できます。
スクリーンショット 2015-04-19 17.46.10

3 「djUnit」を利用したカバレッジの測定方法

テスト対象となるクラスの説明

HogeクラスとFooクラスをテスト対象として用意しました。中身は本当に簡単な内容です。

Hoge.javaは以下のようになります。

NumberFormatExceptionのキャッチの処理は、本来であれば数値の変換可否チェックを行えば要らない処理です。例外がスローされると処理が重くなるので、オススメできないロジックですが、例外スローのカバレッジがどうなるか確認したいため敢えてこうしています。

Foo.javaは以下のようになります。

テストクラスとカバレッジの計測

カバレッジの計測

先ほどのHoge.javaとFoo.javaをテストするクラス(HogeTest.java)を用意しました。

HogeTest.javaは以下のようになります。

HogeTestのおけるカバレッジを計測してみます。
HogeTestクラスのカバレッジを計測したい場合は、パッケージ・エクスプローラーでHogeTest.javaを選択し、右クリックメニューの[カバレッジ]>[JUnitテスト]をクリックします。
スクリーンショット 2015-04-17 19.15.57

テスト実行後に、「ガバレッジ」ビューを参照すると以下のように表示されました。
スクリーンショット 2015-04-19 18.00.19

Hoge.javaとFoo.javaのカバレッジが表示されています。
スクリーンショット 2015-04-19 18.01.29

Hoge.javaとFoo.javaの各クラスの実行状態(緑、黄、赤)を参照するには、このビューの対応する行をダブルクリックします。
スクリーンショット 2015-04-19 18.05.15

Hoge.javaの結果は以下のようになりました。
スクリーンショット 2015-04-19 18.09.15

Foo.javaの結果は以下のようになりました。
スクリーンショット 2015-04-19 18.10.49

Foo.javaの結果は想定通りですが、Hoge.javaの結果はイマイチ納得いかないです。
何故13行目のcatch文が黄色なのかが不明です。例外がスローされて例外処理に入っているにも関わらず黄色ですね・・・

では、methodBに数値の文字列を渡すテストメソッドを追加してみます。
HogeTest.javaは以下のようになりました。

再度カバレッジを測定すると、結果は以下のようになりました。
スクリーンショット 2015-04-19 18.19.03

両クラスとも100%なので敢えて個別のクラスの結果を貼り付ける必要もないですが
Hoge.javaの結果は以下のようになりました。
スクリーンショット 2015-04-19 18.20.45

Foo.javaの結果は以下のようになりました。
スクリーンショット 2015-04-19 18.21.26

この結果から、catch句は、例外が発生するテストと発生しないテストを実装しないと緑色にならないと推測されます。

JUnit入門その8[Eclipse4.4のJUnitプラグインのテストケースのカバレッジをEclEmmaを利用して測定してみる]は以上です。


スポンサードリンク



関連記事

Java8の新機能について

オラクルは2014年3月18日(日本時間3月19日早朝)に「Java 8」を正式に公開しました。

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・クラスパスの順序およびエクスポート設定]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「ビルド・クラスパスの順序および

記事を読む

JUnit入門その4[Eclipse4.4のJUnitプラグインとDBUnitの併用(環境構築と基本)]

JUnit入門その1 JUnit入門その2[Eclipse4.4のJUnitプラグインのasse

記事を読む

Eclipseのインストールと日本語化とJDK8(Java8)対応[Eclipse4.4とEclipse4.3]

インストールするEclipseのバージョンですが、とりあえず4.3をターゲットとしておき、 4.4

記事を読む

Eclipse(4.3,4.4)の使い方[パースペクティブのツールバーのカスタマイズ(「コマンド・グループ可用性」と「ショートカット」タブ)]

「パースペクティブのカスタマイズ」画面には、以下の4つのタブが存在しております。 ツール・バ

記事を読む

Java超入門 with Eclipse[5:クラスに関する基礎知識(メソッドをJUnitを使って説明)]

クラスに関する基礎知識シリーズも、いよいよメソッドを残すのみとなりました。 前回までは、Eclip

記事を読む

Eclipse Oxygen Update 1 (4.7.1)を利用してJUnit5の公式ガイドの内容を実践してみる。

いよいよJUnit5が本格的に利用できる環境が整ってきました。 本エントリーでは「Eclips

記事を読む

JUnit入門その3[Eclipse4.4のJUnitプラグインとMockフレームワークのJMockitの併用の基本]

JUnit入門その3ではMockフレームワークのJMockitを利用したテスト環境の構築と使い方につ

記事を読む

Eclipse(4.3,4.4)の使い方[各画面エリアの名称とパースペクティブのビューのカスタマイズ]

本エントリーでは、Eclipse(Eclipse4.3,4.4)の各画面エリアの名称の説明と、ビュー

記事を読む

Java超入門 with Eclipse[2:プリミティブ型(基本データ型)とは]

他のプログラミング言語と同様に、Javaにもデータ型が存在します。 Java超入門の第2回では、プ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Eclipse Oxygen Update 1 (4.7.1)を利用してJUnit5の公式ガイドの内容を実践してみる。

いよいよJUnit5が本格的に利用できる環境が整ってきました。

Spring5入門[簡単なWebアプリのユニットテストをJUnit5とJMockitで作成]

Spring5入門ではJUnit4とmockitを利用したSpring

Spring5入門[STS(Spring Tool Suite)で簡単なWebアプリの典型的なユニットテストの実現方法]

前回は「Spring入門」で、Spring MVCを利用した簡単なWe

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりも

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にS

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑