LoginSignup
6

More than 1 year has passed since last update.

posted at

updated at

EclipseでJUnitを動かす方法

JUnitとは

  • Javaプログラムにおいてユニットテストができるツール(フレームワーク)を行う
  • テスト自動化ができる
    • 手作業が減るため、テスト工数削減やヒューマンエラー防止に効果あり。

前提条件

  • Eclipseがインストールされていること
  • 以下のような構成のプロジェクト、パッケージ、プログラムファイルを作成していること
ProjectA  ----  src
                 |
                 ------ xx.yy.zzz(パッケージ)
                            |
                            ------- Door.java (テスト対象クラス)

設定

パッケージxx.yy.zzz配下に、Door.java (テスト対象クラス)をテストするためのクラス「DoorTest.java」を作成します。

  • Eclipseでプロジェクトを右クリック [新規] - [その他]をクリック

image.png

  • 「Java」 - 「JUnit」 - 「Junitテストケース」を選択して 次へ をクリック

image.png

  • 下図を参考に、必要な値を設定する

image.png

  • 「DoorTest.java」の雛形ができました。
DoorTest.java
package xx.yy.zzz;  // テスト対象クラスと同じパッケージにする

import static org.junit.Assert.*;

import org.junit.Test;

public class DoorTest {

    @Test
    public void test() {
        fail("まだ実装されていません");
    }

}

  • 試しに実行してみましょう。 DoorTest.javaを右クリックして、 [実行] - [実行の構成]

image.png

  • 下図を参考に、必要な値を設定する。テスト・ランナーは「JUnit 4」にするのを忘れずに!
    image.png

  • 実行結果です。failメソッドが呼び出されるので、結果は必ず「失敗」になります。

image.png

テストプログラムを書く

テスト対象クラス

Door.java
package xx.yy.zzz;  // テストクラスと同じパッケージにする

public class Door {
    private boolean isOpen = false;

    public void open(String str) {
        if (str.equals("開けゴマ!")) {
            isOpen = true;
        } else {
                        isOpen = false;
            System.out.println("違います。");
        }
    }

    public void close() {
        isOpen = false;
    }

    // getter
    public boolean isOpen() {
        return isOpen;
    }

}

テスト内容

  • test1. openメソッドで"開けゴマ!"以外を指定すると、ドアが開らない(isOpenメソッドの戻り値がfalse)こと。また、「違います。」と標準出力されていること。
  • test2. openメソッドで"開けゴマ!"を指定すると、ドアが開く(isOpenメソッドの戻り値がtrue)こと。
  • test3. closeメソッドでドアが閉じる(isOpenメソッドの戻り値がfalse)こと。

テストクラス

Door.java
package xx.yy.zzz;  // テスト対象クラスと同じパッケージにする

import static org.junit.Assert.*;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class DoorTest {

    Door door;
    private ByteArrayOutputStream baos;

    // 前処理
    @Before
    public void setUp() {
        door = new Door();

        baos = new ByteArrayOutputStream();
        System.setOut(
            new PrintStream(
                new BufferedOutputStream(baos)
            )
        );
    }


    // 「@Test」は、JUnitがテストメソッドと認識するためのアノテーション
    // public voidで作成すること
    @Test
    public void test1() {
        door.open("ドア、開いてください");

        // 標準出力
        System.out.flush();
        String expected = "違います。\r\n";
        String actual = baos.toString();

        // 期待値との確認
        assertEquals(false, door.isOpen());
        assertEquals(expected, actual);
    }

    @Test
    public void test2() {
        door.open("開けゴマ!");
        assertEquals(true, door.isOpen());
    }

    @Test
    public void test3() {
        door.close();
        assertEquals(false, door.isOpen());
    }

    // 後処理
    @After
    public void fin() {
        // DO Nothing
    }

}

[補足]

  • System.setOutメソッド:「標準」出力ストリームを割り当てし直します。引数はPrintStreamクラスです。
  • PrintStreamクラス:新しい出力ストリームを作成するために使います。
  • BufferedOutputStreamクラス:バッファのデータを出力ストリーム化します。
  • ByteArrayOutputStreamクラス:データがバイト配列に書き込まれる出力ストリームを実装します。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6