Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。

基本操作

ここでは、例題を用いJUnitの基本操作ついて解説します。JUnitでのテストはJUnitのTestCaseクラスを継承したテストプログラムを作成し、それを実行することで行います。

実行環境
  • ・WindowsXP Home Edition
  • ・J2SDK 1.4.2_04
  • ・JUnit 3.8.1

例題

例題で使用するプログラムはコマンドライン引数で指定された文字列を数値に変換するものです。このプログラムが正しく動作するかを確認するテストプログラムを作成していきます。

動作確認するプログラム

public class ChangeNum {
    public static void main(String[] args) {
        ChangeNum cn1 = new ChangeNum();  //(1)オブジェクト生成
        cn1.changeNum(args[0]);  //(2)changeNumメソッド呼び出し
    }

    int changeNum(String s1) {
        int n1 = Integer.parseInt(s1);  //(3)数値に変換
        return n1;
    }
}
  1. (1)ChangeNumオブジェクトcn1を生成します。
  2. (2)コマンドライン引数で指定された値を引数に取り、changeNumメソッドを呼び出します。
  3. (3)引数に指定された値をparseIntメソッドで、int型に変換します。

テストプログラム作成のルール

テストプログラムは以下のルールに基づき作成される必要があります。

  • junit.frameworkをインポートする。
  • メソッド名はtestで始まる必要がある。
  • String型の引数を1つ持つコンストラクタを作成する。

必須ではありませんが、以下のルールに準拠したテストプログラムを作成した方が良いとされています。

  • 1クラスにつき、1つのテストプログラムを作成する。
  • テストメソッドは戻り値も、引数も持たない(戻り値、引数に影響を受けるテストメソッドは作らない)。
  • JUnitで用意されているメソッドをテスト判別に使用する。

JUnitで用意されているメソッド

メソッド 内容
assertEquals(
arg1, arg2)
arg1とarg2が同じ値かどうか判別します。違う場合はFailure(失敗)になります。基本型、オブジェクト型の両方を判別できます。
assertEquals(msg, arg1, arg2) 上記と同様に振舞います。値が違う場合はメッセージとしてmsgを表示します。
assertTrue(boolean) 引数がtrueかどうか判別します。falseの場合はFailure(失敗)になります。
assertTrue(String, boolean) 上記と同様に振舞います。falseの場合はメッセージとしてStringの値を表示します。
assertFalse(boolean) 引数がfalseかどうか判別します。trueの場合はFailure(失敗)になります。
assertFalse(String, boolean) 上記と同様に振舞います。trueの場合はメッセージとしてStringの値を表示します。
assertNotNull (Object) 引数がNullでないか判別します。Nullだった場合はFailure(失敗)になります。
assertNotNull(String, Object) 上記と同様に振舞います。Nullだった場合はメッセージとしてStringの値を表示します。
assertNull(Object) 引数がNullかどうか判別します。Nullでなかった場合はFailure(失敗)になります。
assertNull(String, Object) 上記と同様に振舞います。Nullでなかった場合はメッセージとしてStringの値を表示します。
assertSame(Object1, Object2) Object1とObject2が同じオブジェクトを参照しているかどうか判別します。同じオブジェクトでなかった場合はFailure(失敗)になります。
assertSame(String, Object1, Object2) 上記と同様に振舞います。同じオブジェクトでなかった場合はメッセージとしてStringの値を表示します。
assertNotSame(Object1, Object2) Object1とObject2が同じオブジェクトを参照していないかどうか判別します。同じオブジェクトだった場合はFailure(失敗)になります。
assertNotSame(String, Object1, Object2) 上記と同様に振舞います。同じオブジェクトだった場合はメッセージとしてStringの値を表示します。
fail( ) 強制的にFailure(失敗)になります。
fail(String) 上記と同様に振舞います。Failure(失敗)の際、メッセージとしてStringの値を表示します。

テストプログラム

JUnitテストで使用されるテストプログラムは以下のようになります。

テストプログラム

import junit.framework.*;  //(1)JUnitフレームワークのインポート

//(2)TestCaseクラスを継承
public class ChangeNumTest extends TestCase {
    //(3)コンストラクタ作成
    public ChangeNumTest(String name) {
        super(name);
    }

    //(4)テストメソッドの宣言
    public void testChangeNum() {
        String ts1 = "100";  //(5)変換前の文字列
        int tn1 = 100;  //(6)変換後の数値
        ChangeNum tcn1 = new ChangeNum();  //(7)オブジェクトの生成
        int test1 = tcn1.changeNum(ts1);  //(8)changeNumメソッド呼び出し

        assertEquals("数値に変換されていない", tn1, test1);  //(9)確認
    }
}
  1. (1)junit.frameworkをインポートします。
  2. (2)TestCaseクラスを継承したクラスを宣言します。
  3. (3)String型の引数を1つ持つコンストラクタを宣言します。
  4. (4)testで始まるテストメソッドの宣言します。わかりやすいように「test + 確認したいメソッド名」とします。
  5. (5)実際のプログラムの際、コマンドライン引数で与えられる文字列を生成します。引数に依存しないテストプログラムを作成するために、引数はすべてテストメソッド内で生成します。
  6. (6)確認用のint型変数を生成します。
  7. (7)changeNumメソッド実行のため、ChangeNumオブジェクトを生成します。
  8. (8)changeNumメソッドを呼び出し、結果をtest1変数に代入します。
  9. (9)assertEqualsメソッドを使用し、確認用の変数tn1と実行結果のtest1変数が同じ値かを確認します。

テスト実行

  1. コンパイル
    動作確認プログラムとテストプログラムを同じディレクトリに配置し、コンパイルします。コンパイルの際、CLASSPATHにjunit.jarとカレントディレクトリを指定します。
    # コンパイル
    D:\JAVA>javac -classpath E:\junit3.8.1\junit.jar;. ChangeNum*
  2. 実行
    TestRunnerプログラムの引数にテストしたいプログラムを指定し、実行します。CLASSPATHにはjunit.jarとカレントディレクトリを指定します。JUnitのSwing画面が立ち上がり、緑のバーが表示されるとテスト成功です。赤のバーが表示されると何らかのエラーがあります。
    # 実行
    D:\JAVA>java -cp E:\junit3.8.1\junit.jar;. junit.swingui.TestRunner ChangeNumTest

成功

Javaの道_JUnit_テスト成功

失敗

Javaの道_JUnit_テスト失敗

2基本操作