システム開発ではテストは非常に重要な役割を担いますが、テスト用ツールを導入して効率化を図ることが出来ているでしょうか。
本記事では、Javaのシステム開発では欠かせないテスト用ツール「JUnit」の基本を初心者向けにご紹介していきます。
目次
Java開発におけるテストの重要性
Javaではオブジェクト指向と呼ばれるデータの集まりをオブジェクトとして捉えることにより、処理を分離させ並行して開発が出来るようになっています。
チーム開発には非常に有用で、オブジェクトの役割さえ分かっていれば中身の構造は分からなくても利用出来ますが、その分オブジェクト自体がきちんと動作することが前提となってきます。
単体テストの重要性
オブジェクト毎に役割をもち、それらを組み合わせることでシステム全体を構築することから、1つ1つのオブジェクトが役割を果たせることが保証されている必要があります。
この1つのオブジェクトまたは小規模レベルでのテストを「単体テスト」と呼び、単体テストで動作保証されていないと、以降の工程である結合テストなどで不具合が発生してしまうと手戻りが大きくなってしまうリスクがあります。
そのため単体テストレベルで正確に動作することを保証させることがJava開発においては非常に重要です。
単体テストツール
自分自身でプログラムを動かしながら不具合がないか確認することももちろん大切ですが、膨大なプログラムでは効率的にテストを行わないと時間がいくらあっても足りません。
そこで導入したいのが今回ご紹介する「JUnit」のような単体テストツールです。
JUnitはテスト用のフレームワークとして提供されており、テストを自動化出来ることから、作業時間の短縮と人的ミスを防ぐことが可能となります。
Javaの単体テスト用ツール JUnitのインストール方法
Javaの単体テスト用ツールは色々ありますが、最も有名な「JUnit」を利用していきたいと思います。
今回はJava開発で利用者の多い「Eclipse」を用いてインストール作業を実施してみましょう。
JUnitの追加
画像のように「sample」というプロジェクトに「Main.java」ファイルを作成した状態から進めていきます。
プロジェクトを右クリックして「ビルド・パス」から「ライブラリーの追加」を選択します。
「JUnit」を選択して「次へ」ボタンをクリックします。
JUnitのバージョンを選択して「完了」ボタンをクリックします。
これでJUnitが利用出来るようになりました。
テスト用のクラスを作成
次にテスト用のクラスをテンプレートとして利用出来るところまで作成していきましょう。
通常のクラスファイルを作成する際と同じように、右クリックから「新規」→「クラス」を選択します。
サンプルでは「JavaTest」と名前を付けて「完了」ボタンをクリックしています。
これでテスト用コードを記述するクラスも作成出来たので、実際にサンプルのテストコードを作成して動作確認してみましょう。
Javaのサンプルテストコード
ここからは実際にサンプルコードとテストコードを作成してJUitでのテスト概要について確認していきます。
サンプルコード作成
テスト対象のクラスとして「Main.java」、テストコードを記述するクラスとして「JavaTest.java」ファイルを下記の内容で作成しています。
Main.java
Main.javaには3つのメソッドを作成し、それぞれを対象したテストコードが記述出来るようにしました。
package sample; public class Main { public static void main(String[] args) { } public String test1(String str) { return str; } public String test2(String str) { str = "値変更"; return str; } public int calc3times(int num) { num = num * 3; return num; } }
JavaTest.java
JavaTest.javaではMain.javaに記述した各メソッドに対してのテスト用メソッドを3つ用意しています。
package sample; import static org.junit.Assert.*; import org.junit.Test; public class JavaTest { @Test public void testStr1() throws Exception { Main main = new Main(); String test = "テスト1"; String result = main.test1(test); assertEquals(result, test); } @Test public void testStr2() throws Exception { Main main = new Main(); String test = "テスト2"; String result = main.test2(test); assertEquals(result, test); } @Test public void testCalc() throws Exception { Main main = new Main(); int test = 5; int expect = 15; int result = main.calc3times(test); assertEquals(result, expect); } }
サンプルを実行してみると上記画面のように赤く表示されており、3つ実行した内の1つ(testStr2)だけが失敗していることが分かります。
ちなみに失敗している「testStr2」は意図的なものなので、コメントアウトして実行してみましょう。
上記画像のように緑色で表示されていれば全てのテストケースが成功していることになります。
解説
今回のサンプルはシンプルなテストとして、文字列比較と計算結果の整合性確認を実施しました。
注目して頂きたいのは「JavaTest.java」ファイルの13, 21,30行目に記載している「assertEquals」メソッドで、このメソッドにより引数の値が一致している場合はテスト合格、異なる場合は不合格として判断されます。
テスト用のクラスから「Main.java」をインスタンス化して、各メソッドを呼び出した結果、「testStr2」メソッドに関しては値が異なるためエラーとなっています。
今回はシンプルな比較のみですが、JUnitより提供されているAssertクラスのメソッドを利用すれば他にも様々なテストケースを作成することが可能です。
ここで注意して頂きたいのは、エラーが出た際にプログラムが間違っているのか、テストコード自体が間違っているのかをきちんと判断しないといけない点にあります。
テストコード自体は以前より利用されているもので、プログラムを変更した結果エラーが出たということであれば分かりやすいのですが、最初にテストコードを実装する際には気をつけなければいけないポイントです。
さいごに: Javaのテストツールを活用して開発効率を向上させよう
本記事では、Java開発におけるテストツールの重要性と人気の高いJUitの導入方法についてご紹介してきました。
テストツールを利用することで、テストの自動化を行うことが出来るため、最初のテストコード作成時間は掛かってしまいますが長期的に見ると大幅な時間の節約が期待出来ます。
まだJavaのテストツールを試したことがない方も、ぜひ一度テストツールを利用して作業の効率化を検討してみてください。
JUnitのテストは、プロジェクトを右クリックして「実行」→「JUnitテスト」から実行可能です。