プログラミング 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中級者にレベルアップするには?

本記事は 「Javaでプログラムを書けるようになってきたけど、次はどうすればレベルアップできるのか?」 と次の目標を探している方向けです。 以下のレベル感の方を対象にしています。 ・Javaの基本構文 …

no image

GitでIndexが壊れたときの直し方

これは自分の環境用の備忘録です。 (状況) Virtual BOX内のGit環境において、INDEXが0KBになっている。(INDEXが壊れている) (対処方法) リモート環境から新しくCloneして …

【Javaサンプル】自動販売機を作成(Level1)

Javaの勉強用サンプルです。 テーマは自動販売機。 プログラミング初心者向けに書いています。   自動販売機を題材として選んだ理由 自社研修で行っている 自社研修で自動販売機を作成したので …

【SpringBoot入門】#11~ 削除ダイアログの作成

概要 検索結果から削除機能を呼び出した際に、削除を確認するためのダイアログです。 実装はjQueryで行いますので、mavenへの追加作業等の準備を別途行います。 イメージ jQueryの準備 jQu …

使って便利だったNode.jsのnpmモジュール

Excel操作 xlsx Excelファイルからシート単位でデータを読み取り、JSON化することができるモジュール。 VBAでは処理が遅い場合の代替手段となるが、書式設定はできない。 JSONファイル …

SpringFramworkの良書

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

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