プログラミング 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入門】判定処理(if, if else, switch文)の使い方まとめ

概要 判定処理には、if / if-else / switch文があります。 これらはとても基本的な判定処理ですが、基本的な使い方に加えて、ちょっとした構文上のTipsや注意点についても解説していきま …

no image

PHPの開発環境の作り方

前提 OS:Windows10 準備 XAMPPのダウンロード https://www.apachefriends.org/jp/download.html 構築 XAMPPのインストール インストー …

【Spring Data JPA】deleteAllとdeleteAllInBatchの違い

概要 Spring JPA Dataにおける、deleteAllとdeleteAllInBatchの挙動の違いについてです。 結論から言うと、実行されるSQLが違います。 SQLの違い 【前提】 3件 …

no image

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。 対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限 …

2進数を使うと判定がシンプルになる!(じゃんけんプログラム編)

概要 仕事で2進数を使った判定処理について学んだので共有したくて執筆しました。 仕事上で設計したロジックは本記事で紹介するものより複雑でしたが、本質的な部分は変わらないので使って頂けると思います。 説 …

SpringFramworkの良書

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

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