【Junit5】ParameterizedTestを使ってみる

2022年10月9日

はじめに

お世話になります、hosochinです
今回はJunit5のParameterizedTestの機能を使ってみたいと思います
こいつはJunit5から使えるアノテーションで、用意されたパラメータの分だけテストメソッドを実行してくれる便利機能です
テストメソッドがだいぶスッキリかけそうです
詳細については公式ドキュメントを参照してください

シンプルなParameterizedTest

テストコード

    // テストメソッド
    @ParameterizedTest
    @ValueSource(ints = {0, 1})
    void test(int num) {
        assertTrue(checkNum(num));
    }

    // テスト対象のメソッド
    public boolean checkNum(Integer num) {
        if (num == null || num == 0 || num == 1) {
            return true;
        }
        return false;
    }

説明

ParameterizedTestを使うにはおなじみTestアノテーションの代わりにParameterizedTestアノテーションを付与してあげます
次にValueSourceアノテーションでパラメータを指定します
今回は0と1の2パターンを用意して、checkNumメソッドの結果がtrueになることを確認するテストとなっています
テストメソッドは0, 1の順番で合計2回実行されます👍
また、パラメータの型はプリミティブ型で用意されてそうです
指定できるパラメータの種類についてはこちらを参照

パラメータにnullや空文字列を含める場合

シンプルなParameterizedTestに載せたテストコードだとnullのパターンが網羅できていません
nullのパターンを含める場合はNullSourceアノテーションを付与するだけです(テストメソッドの引数はIntegerにしてあげる必要があります)
以下のテストメソッドは0, 1, nullの順番でテストが実行されます

テストコード

    // テストメソッド
    @ParameterizedTest
    @ValueSource(ints = {0, 1})
    @NullSource
    void test(Integer num) {
        assertTrue(checkNum(num));
    }

ちなみにパラメータがStringの場合はEmptySourceで空文字列のパラメータ、NullAndEmptySourceでnullと空文字列の両方のパラメータを実行してくれます

    // テストメソッド
    @ParameterizedTest
    @NullSource // nullのパラメータで実行
    @EmptySource // 空文字列のパラメータで実行
    @NullAndEmptySource // nullと空文字列のパラメータで実行
    void test(String str) {
        assertTrue(checkStr(str));
    }

2つ以上のパラメータをテストしたい場合

ValueSourceだと、1度に複数のパラメータを渡すことができません
複数パラメータを渡す方法については、こちらの記事にまとめています👍

技術Java,junit

Posted by hosochin