プログラミング Java

【JUnit5】パラメータ化テストの書き方まとめ

投稿日:

概要

1つのテストに複数のデータを適用したいときにはパラメータ化テストが有効です。
ここでは様々なパラメータ化テストを利用シーンに合わせて解説していきます。

パラメータ化テストを実装する時は、@ParameterizedTestをテストメソッドに付与します。

準備

パラメータ化テストを実装するには、junit-jupiter-paramsの依存関係を追加する必要があります。
そのため、build.gradleに以下を追加します。
https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params

単一データ

テストデータとして単一なものを扱います。

@ValueSource

StringやIntegerといったリテラル値を配列で与えることができます。

String型のテスト
@ValueSourceにstringsを引数名して、値は配列で与えます。

実行結果
テストデータの結果が成功か失敗かを各テスト毎に確認することができます。
※成功した結果をIntelliJで確認する場合、画像左上の☑マークをONにすること。

他の型について
String以外のオプションは下記ドキュメントの「Optional Element Summary」に一覧化されています。
Annotation Type ValueSource

Class型のテスト
StringやIntegerは簡単ですが、Class型はどう扱うかのか私はピンときませんでした。
なので少し調べたところ、簡単な例があったので紹介します。
Class型のテストはあまり使う機会はないと思いますが、こういった使い方なのだということがわかっておけばいいかなと思います。

参考
What is the use of @ValueSource(classes= …..)

複数データ

複数のデータをテストデータとして扱います。
また、引数に与えるデータは暗黙的に型変換されます。(2.15.4. Argument Conversion

@CsvSource

テストデータは基本的にCSVで与えますが、カンマ以外を区切り文字にするオプションなども用意されています。

※テストデータのみであればオプション名[value]は省略できます。
 しかし、他のオプション(delimiterString等)を使用した場合、[value]は明示的に指定する必要があります。

@CsvFileSource

CSVファイルをテストデータとして使うことができます。

add.csv
データ

配置先(src/test/resources/add.csv)

テストコード
テストファイルの配置先を指定するオプションに、resourcesまたはfilesのいずれかを指定できます。
パスの指定方法が異なるので以下を参考にして下さい。
・resources:resourcesディレクトリ配下にある想定でパスを指定
・files :プロジェクト直下にある想定でパスを指定

@CsvSourceと同様にdelimiterまたはdelimiterStringで区切り文字を指定できるので、TSVのテストも可能です。

Enum

Enum定義をテストするためのテストデータを提供するアノテーションです。

@EnumSource

基本的な使い方は以下のようなパターンです。

引数パラメータ
value:Enumのクラスを指定します。
mode:namesで指定する値または正規表現の条件を指定します。
    指定方法は以下の4つが可能です。
    ・MATCH_ANY(部分一致)
    ・MATCH_ALL(完全一致)
    ・INCLUDE(含む)
    ・EXCLUDE(含まない)
names:Enumの値または正規表現を指定します。

ファクトリメソッドによる指定

MethodSourceで注意すべき点は以下の2つです。
・戻り値はStreamとする。
・定義するメソッドはstaticとする。

@MethodSource

単一の値を扱う場合
単純なintやStringの値をテストデータにする場合は、CsvSourceまたはValueSourceで十分です。
もしMethodSourceを使うのであれば、リテラル値でない型であるか、メソッドでテストデータを作るとよい場合です。

複数の値を扱う場合
テストの値が複数かつリテラル値以外も扱う場合も有用です。
以下はとても簡単な例ですが、どのように書くかの参考になると思います。

まとめ

  • 1つのテストに複数のデータを適用したいときにはパラメータ化テストを使う。
  • パラメータ化テストを実装するには、junit-jupiter-paramsの依存関係を追加する。
  • パラメータ化テストとして、@ValueSource、@CsvSource、@EnumSource、@MethodSourceが用意されている。

参考

Junit5 Usere Guide – 2.15. Parameterized Tests

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

難しい,困難,頭を抱える

オブジェクト指向が難しいと思うならこれを読め!

オブジェクト指向はJava、JavaScript、PHP、Python、Rubyなどなど 色んな言語で使われているパラダイム(考え方)です。 上から順に追っていくだけ(手続き型)ではわからない仕組みに …

【Javaサンプル】自動販売機(Level2) メソッドに小さく分割する

前回の自動販売機(Level1)では、まず動くものを作りました。 そこでは1つのメソッド(Main)にすべてをコーディングしていましたが、 これを機能ごとに分割していきます。 実際の仕事では、1つの大 …

Iteratorパターンは何のためにあるか?

Iteratorパターンとは Iteratorパターンとは、「何らかのリストから順次取り出す仕組み」です。 Iteratorパターンではわざわざインターフェースで実装していますよね。 これは、イテレー …

オブジェクト指向とは何なのかを簡単に説明してみる

オブジェクト指向とは何なのか? これを私の理解を元に、ごくごく簡単に説明してみたいと思います。   オブジェクト指向とは? オブジェクト指向とは何かを説明するために、 「オブジェクト」と「指 …

【SpringBoot入門】#4~ headerの作成と埋め込み

概要 全ての画面で使用するヘッダーを作成します。 そして、Index画面に埋め込むところまでを行います。 共通ヘッダーの作成

・&lt …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。