*

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


スポンサードリンク



関連記事

JDK8(java 8)の新機能のラムダ式の利用方法[その1:概要]

「JDT betaを利用してJDK8対応のEclipse開発環境を作成する」では、「Eclipse」

記事を読む

Java8の新機能について

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

記事を読む

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

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

記事を読む

Eclipseの「JSDT-jQuery」プラグインでJQuery(JavaScript)のコード補完が可能な環境を作成する

Eclipse for JavaEE Developer等のWeb開発系のEclipseがインストー

記事を読む

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

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

記事を読む

Eclipse4.4(Java)におけるビルド・パス関係の設定方法[JRAおよびクラス・フォルダー/ライブラリー]

Eclipse4.4(Java)におけるビルド関係のビルド・パス上の「JRAおよびクラス・フォルダー

記事を読む

Eclipseの「DBViewer」プラグインの使い方[前編]

「HyperSQL」の環境を作成し、Eclipseの「DBViewer」プラグインを利用してSQLを

記事を読む

Eclipse(4.3,4.4)のJava言語のリファクタリング機能の使い方[リファクタリングの説明と「名前変更」と「移動」]

本エントリーでは、Eclipse(4.3,4.4)の「リファクタリング」機能の使い方を説明させていた

記事を読む

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

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

記事を読む

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

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

記事を読む

Message

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

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

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

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

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

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

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

Selenium入門その5[ページオブジェクトパターン(Page Object Design Pattern)を利用して変更に強いテストを作成する方法]

Selenium入門その2 では「UIマップファイル」と言う仕組みが

Javaによる非同期処理入門その1[非同期処理の実装方法の概説]

Javaによる非同期処理に関するエントリーを前々から作成したいと思って

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑