Java

JUnit 入門・基本的な使い方

JUnitは、Javaで開発されたプログラムのふるまいを
検証する為のフレームワーク、
関連するツール群の総称になります。

ユニットテストとは、コードの一部(ユニット)の
ふるまいを検証するためのテストを意味します。

ユニットのサイズは決まっていません。
ユニットを「システムの中で何らかの
有益なふるまいを行う小さなコード」であると定義します。

SPONSORED LINK

ユニットテストを作成するタイミングや、その理念とは?

JUnitの目的とする理念

  • 何らかの機能のコーディングが完了し、期待通りにふるまうかどうかを確認したい場合
  • コードへの変更内容を記録し、自分や他の開発者が変更の意図を理解できるようにしたい場合
  • システムのふるまいについて理解したい場合
  • 他者によるコードが期待通りに機能しなくなった際に、それがいつからなのか知りたい場合

最も重要なことは、
良いユニットテストを行えば自信を持って
実運用向けのシステムを
リリースできるという点です。

いわゆる単体テストが完璧であれば、
その後の結合テストによる
バグの可能性も低いと考えられる為、
JUnitテストは大きな開発プロジェクトで
あればあるほど重宝されています。

JUnit4のアノテーション・テストケースのメソッド

JUnit4で使用される基本的なアノテーション

SPONSORED LINK

JUnit4で使用される基本的なAssertクラス

Eclipseからテストクラスを作成するとJunit.Assertクラスがインポートされます。

どのようなテスト観点かによって使用するメソッドが違ってきます。
上記に記載してあるメソッドを覚えておけばまず困ることはないでしょう。
ちなみにJUnitで使用頻度が高いメソッドがassertEquals()です。

SPONSORED LINK

JUnit4の基本的な使い方

ここでは、とても簡潔な方法で説明していきます。
まずテストを行いたいソースがあるフォルダーとは、
別にテスト用のフォルダーを作成します。

今回はtestを作成しました。
srcにはテストを行いたいCarクラスがあります。

1.テストを行いたいクラスで右クリック。[新規]>[その他]をクリック。

2.JUnitテスト・ケースを選択し、[次へ]をクリック。

3.[参照]をクリックし、フォルダーはtestを選択。テスト元クラスを確認後、[完了]をクリック。

4.testフォルダー内にCarTestクラスが作成されます。

上記の方法だとテストクラスのメソッドには自動的に@Testがつく状態になります。



SPONSORED LINK

JUnit4の簡単なテストを実装

では実際にCarTestクラス作成して解説していきます。
まずCarクラスにある各メソッドをテストする必要があるので、
ここではoiling()とdistance()が該当します。

テスト実行結果

assertEqualsメソッドの場合
ユーザの設定した期待値と実際の値が
イコールであればソースコードの整合性が
取れていると判断できます。
それはテストに成功したことを表しています。

違う場合はテストに失敗し
ソースコードの整合性が取れていないことになります。

oilingTest01()に記載してあるassertEquals()の解説

distanceTest01()に記載してあるassertThat()の解説

またassertThat()を使用することで、
期待しない値との検証することも可能になります。

改行

SPONSORED LINK

JUnit4で使用される基本的なassertThatメソッド

Assertクラスのメソッドの1つになり
hamcrest.CoreMatchersクラスをインポートすると使用が可能になります。

テストでバグを引き起こす境界条件


ユニットテストを使って発見されるバグのほとんどが境界条件に関連しています。
逆に言えば境界条件の観点で試験項目を作成することができれば、
良いユニットテストを行ったと言えるでしょう。

CORRECTに従って、テスト対象のメソッドの中に
同等の条件が発生するか考慮し、再現性のあるテストにしてください。

  • Conformance(適合)
  • 期待値の形式に適合しているか

  • Ordering(順序)
  • 期待値の集合は適切な順序に並び替えられているか

  • Range(範囲)
  • 期待値は最小値と最大値の範囲内にあるか、閾値は妥当か

  • Reference(参照)
  • 自身が直接コントロールできない外部のコードを参照していないか

  • Exisstence(存在)
  • 期待値はnull、ゼロ、空(ブランク)でないか

  • Cardinality(要素数)
  • 期待値は十分な個数を満たしているか

  • Time(時間)
  • 適切なタイミングや一定順序で発生し、処理結果となる期待値は想定される時間内に完了するか

SPONSORED LINK

ピックアップ記事

  1. Java クラスのインスタンス化・初期化とは?
  2. Java 9が正式リリース
  3. Java入門 JavaプラットフォームやJava言語の仕組み

関連記事

  1. Basic

    Java入門 JavaプラットフォームやJava言語の仕組み

    改行 プログラミング言語Java本来コンピュー…

  2. Java

    Java オブジェクト指向の解説・ポリモフィズム(abstract)

    ポリモフィズムは多様性を意味します。傾斜によるメソッドのオーバーラ…

  3. Basic

    Java プロパティファイル(property)の作成と読み込み、編集方法、配置先の解説

    こちらの記事でプロパティファイル(property)の使い方を応用して…

  4. Java

    Java Template Method デザインパターン(abstract)の使い方や特徴を具体的…

    テンプレートの機能を持つ スーパークラス(親)の方にテン…

  5. Java

    Java String型とDate型の変換・Calendarの関係性

    現場でも使用頻度が非常に高い日付を扱ったソースについて解説していき…

  6. Java

    Java yyyyMMddからyyyy/MM/ddへ変換して日付判定する方法

    データベースから日付情報A(char長8)の文字列を取得して日付の判定…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Recommended Article

Pickup

  1. Basic

    Java オブジェクト指向の解説・継承
  2. JavaScript

    JavaScriptの仕組み
  3. News

    脆弱性が多いプログラミング言語、第2位はPHP – 大差で第1位にな…
  4. News

    最新Java情報局 Oracleno四半期パッチ公開
  5. Servlet・JSP

    サーブレットの基礎
PAGE TOP

Copyrighted Image