*

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を利用して測定してみる]は以上です。


スポンサードリンク



関連記事

JUnit入門その6[Eclipse4.4のJUnitプラグインとDBUnitの併用(便利に利用するためのユーティリティの作成)]

JUnit入門その4 でDBUnitの環境構築を説明させていただきました。 今回は、前提値デ

記事を読む

JUnit入門その5[DBUnitの概要説明]

前回エントリーでは「JUnit入門その4」と題してDBUnitをEclipseで動作させるための環境

記事を読む

JDK8(Java8)のインストール方法[Windows]

本エントリーは、Windows7 64bitにJDK8(Java8)をインストールする説明を記載させ

記事を読む

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

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

記事を読む

Eclipseの使い方(Windows環境のEclipse4.3、Eclipse4.4)

Eclipse4.4.0よりJDK8を正式サポートするそうです。 Eclipseトップレベルプ

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・パス上のソース・フォルダー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上のソース・フォルダーの利用方法を説

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[ビルド・パス上に必要なプロジェクト/プロジェクト参照の追加]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「ビルド・パス上に必要なプロジェ

記事を読む

Eclipseの使い方(Eclipse4.4のブックマーク機能とタスク機能)

今回は、Eclipseのブックマーク機能とタスク機能の説明をさせていただきます。 両機能とも効率的

記事を読む

Eclipse4.4(Java)における自動ビルド設定の変更方法の説明

Eclipse4.4における自動ビルド設定の変更方法を説明させていただきます。 自動ビルド設定の変

記事を読む

JDK8(java 8)の新機能のラムダ式の利用方法[その3:java8が用意している関数型インターフェース]

[その2:関数型インターフェースを例としたラムダ式] と説明させていただいておりますが、

記事を読む

Message

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

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

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の

Java8のラムダ式とStream APIを利用してコーディング量の削減サンプル集

Java8になりラムダ式と「Stream API」が利用できるようにな

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑