JUnit5を使ってテストコードを書こう!②(Mac版)


前回

今回の目標

  • 前回のテストを実行してくれる別のクラスを作成する
  • 前回のテストを(JunitClass)を実行した場合、結果をコンソールに出力する
  • もしテストが通らなかった場合、原因をコンソールに出力する

テストの準備

前回の記事を参考にDemoClassを作成してください。
下にあるチェックボックス(画像)もチェックしましょう。

✅同じ画面が確認できた。

テストコードを書いてみよう

DemoClass.java

package co.hoge;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class DemoClass {

    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(JunitClass.class); // JunitClass.classはclass co.hoge.JunitClass
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println("Result == " + result.wasSuccessful());
        System.out.println(JunitClass.class);
    }

}

テストコードを実行してみよう

テストが通った場合

  • 「DemoClass.java>Run As>Java Application」

✅コンソールに以下の結果が出力される

テストが通らなかった場合

  • 前回のコードを編集する
  • strに代入する文字列を"2回目のJunitを使ったプログラム"に変更
  • JunitClass.javaを実行
JunitClass.java
package co.hoge;

//assertEqualsを静的インポートとして定義します
import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class JunitClass {
    @Test
    public void setup() {
        String str = "2回目のJunitを使ったプログラム";
        assertEquals("初めてのJunitを使ったプログラム", str);
    }

}

✅コンソールの結果が以下の通りになる

コードの解説

DemoClass.java

package co.hoge;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class DemoClass {

    public static void main(String[] args) {
        /*
         * このJunitClass.classで前回作成したJunitClassを指定している。
         * 出力すると「class co.hoge.JunitClass」が出力される
         */
        Result result = JUnitCore.runClasses(JunitClass.class);
        for (Failure failure : result.getFailures()) { // result.getFailuresで失敗した場合の値をFailureクラスの変数failureに渡す
            System.out.println(failure.toString()); // 変数failureつまり「テストが失敗した場合の結果」を文字列として出力する
        }
        System.out.println("Result == " + result.wasSuccessful()); // テストが成功した場合はtrueを返す
    }

}

/*
 * runClasses((Class<?>... classes)); クラスに含まれるテストを実行します。
 * テストの実行中にフィードバックを書き、すべてのテストが完了した後にすべての失敗したテストのスタックトレースを書きます。 これは
 * main(String[]) に似ていますが、プログラム的に使用することを意図しています。
 */

/*
 * JUnitCore はテストを実行するためのファサードです。JUnit 4 テスト、JUnit 3.8.x
 * テスト、そして混合物の実行をサポートしています。コマンドラインからテストを実行するには、java org.junit.runner.JUnitCore
 * TestClass1 TestClass2 .... を実行します。ワンショットテストを実行するには、静的メソッド runClasses(Class[])
 * を使用します。 特別なリスナーを追加したい場合は、まず JUnitCore のインスタンスを作成し、それを使ってテストを実行します。
 */

/*
 * failureは、失敗したテストとその実行中に発生した例外の説明を保持します。 ほとんどの場合、説明文は単一のテストのものになります。
 * しかし、テストの構築中に問題が発生した場合 (例えば BeforeClass メソッドが静的でない場合など)は
 * 単一のテストではない何かを記述することができます。
 * 
 */

次のページ

テストアノテーションとアサートステートメントについて(JUnit5)

参考にした記事(いつもありがとうございます)