ITエンジニアのプレイングマネージャー化応援サイト

Junitで単体テストをする

1.単体テストとは

本記事はJunit4.0で検証しています。

Javaの場合、単体テストとはクラス単位のテストのことです。

単体テストはクラスを作成したプログラマーが自分の責任で行うのが原則です。

今回はテスト対象クラスとして以下を用意しました。

学生の成績を付けるのに以下のような4段階評価をするプログラムです。

S:100点~90点

A:89点~80点

B:79点~70点

C:69点~0点

なお、点数は0または正の整数であり、実数ではないものとする。

<ソースコード①>

2.Junitとは

JUnitとは、Javaで開発されたプログラムにおいてユニットテスト(単体テスト)の自動化を行うためのフレームワークです。(Wikipedia)

当社が提供する研修の環境では、NetBeansにJUnitが最初からインストールされています。

1.JUnitを使ってテストクラスを作成するには、

プロジェクト名を右クリック>新規>既存クラスのテスト を選択すると以下のダイアログボックスが表示されます。

生成するコードでは、必要なコードにチェックを付けます。

今回は、「テスト初期化」と「デフォルトのメソッド本体」を選択します。

2.テストするクラスで先ほどのScore クラスを選び、OKをクリックします。

自動生成されたコードの中で注目したいのが

@Test
というアノテーションです。

この下にテスト用のメソッドを書いていきます。

アノテーションには他にも

@Before
メソッド単位で事前実行します。
オブジェクトの初期化処理などに使います。

など様々あります。

メソッドの中に、

assertEquals(expResult, result);

というメソッドがあります。

expResult:が期待される結果

result:が実際の結果

という意味です。

この両者が一致すればテストOKということになります。

Assertクラスのメソッド

このようなメソッドには、assertEquals()の他に

assertNull();

assertNotNull();

assertTrue();

assertFalse();

などがあります。

 

では、どのようなテストデータを用意したらよいのでしょうか?

そこで有益な考え方が基本情報技術者試験でも頻出のブラックボックステストの2つの方法。

同値分割と限界値分析の考え方です。

3.同値分割とは

同値分割とは、アウトプットが同じになるような入力をグループにまとめ、グループの中から代表を選んでテストを行なう方式です。今回の4段階評価で言えば、

S:95点

A:85点

B:75点

C:55点

さらにエラー値から-10点と110点を用意するような方法です。

前述の通り、@Beforeというアノテーションでは、テストの準備に必要な処理を書きます。

また、メソッド名は日本語で書くと以下のようにテスト結果が読みやすくなります。

4.限界値分析とは

限界値分析とは、出力が同じになるような入力をグループにまとめ、グループが隣接する境界やその前後の値を入力としてテストを行なう方式です。今回の4段階評価で言えば、

S:100点と90点

A:89点と80点

B:79点と70点

C:69点と0点

さらにエラー値から-1点と101点を用意するような方法です。

5.ホワイトボックステストとは

ホワイトボックステストはブラックボックステストとは異なり、クラスの内部構造を考慮に入れたテストです。

その中でも複合条件網羅の考え方が重要になりますので、ここで試してみましょう。

基本情報技術者平成20年春期 午前問48を例にとって説明します。

まず、問題にある判定条件網羅(分岐網羅)についてみていきます。

分岐は2つYesとNoです。

Yesのケース(A=5,B=0)で満たしています。

Noのケース (A=4,B=1)で満たしています。

次に複合条件網羅について考えます。

条件は2つ、A>6、B=0です。

なので、

①A>6がTrue、B=0がTrue

②A>6がTrue、B=0がFalse

③A>6がFalse、B=0がTrue

④A>6がFalse、B=0がFalse

の4パターンをテストしなければいけません。

このうち、

③A>6がFalse、B=0がTrue は 問題文中の判定条件網羅の(A=5,B=0)が満たしています。

④A>6がFalse、B=0がFalse は 問題文中の判定条件網羅の(A=4,B=1)が満たしています。

よってあとは、

①A>6がTrue、B=0がTrue で (A=7,B=0)

②A>6がTrue、B=0がFalse で (A=8,B=2)

を用意すれば複合条件網羅が満たせます。

よって、上記問題の答えは、エ になります。

上記をJunitを使ってテストしてみます。

<ソースコード①>

<ソースコード② テストクラス>

 

以上、NetBeans でJunitを使った単体テストをする方法を解説しました。

さらに詳細なアノテーションやあさーとメソッドについては以下のマニュアルを参照下さい。

JUnit 5 ユーザーガイド

 

NetBeans IDEの説明に戻る

新入社員研修ポータル

IT企業の人財育成に関することなら全てお任せ下さい TEL 0120-559-463 受付時間 10:00 - 17:00 (土・日・祝日除く)

ZOOMを使った遠隔研修メニュー(PDFが開きます)

ZOOMを使った遠隔研修

新人エンジニアのためのJavaタイピングゲーム

新人プログラマのためのプログラミング動画

YouTubeチャンネル

お問い合わせはこちらから

    お名前 (必須)

    メールアドレス (必須)

    題名(件名)

    メッセージ本文

    確認画面は表示されません。上記内容にて送信しますので、よろしければチェックを入れてください。

    新入社員研修ポータル

    PAGETOP
    Copyright © Say Consulting Group, Inc. All Rights Reserved.