【Laravel】PHPUnitのDataProviderの使い方を解説します

スポンサーリンク

こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在5社経験している、14年目エンジニアです。

この記事では、 Laravelのテストで使用するPHPUnitにあるDataProviderについて

  • DataProviderとは
  • DataProviderの使い方

と、丁寧に解説していきます。

前提:実行環境

実行環境は以下の通りです。

OS Windows11
PHPのバージョン 8.2.4
Laravelのバージョン 10.45.1

この記事では

C:\Laravel

配下に【LaravelSample】という名前でプロジェクトを作成しています。
Laravelの単体テストクラスを新規作成するunitオプションを解説

DataProviderとは

DataProviderとは、同じテストメソッドに対して複数の値を与えることができる仕組みです。
基本的にPHPUnitのテストメソッドは、1つの入力値から1つの結果をテストします。
入力値が異なるが結果が同じになるテストケースでもそれぞれテストメソッドを作る必要があり、同じ処理をするコードがたくさん生まれるためテストメソッドが増大します。
そういうときにDataProviderが便利です。
値を渡す箇所を別に切り出して、処理するテストメソッドは1つにすることができます。

文章だとよくわからないので、次の章で具体例を使って解説していきます。

DataProviderの使い方

2つの文字列を連結させて期待通りになっているかのテストメソッドで考えてみます。
こんな感じになります。

もっと引数にほかの値を入れてもテストしたい!となった場合、それぞれの値でのテストメソッドを作る必要があるので、こんな感じになります。

処理するところは同じなのに、入力値が異なるのでそれぞれテストメソッドを作る必要があります。
これは重複しまくりなので、保守が大変で読みやすいコードではないです。
こういうときにDataProviderが便利です!

まず、渡したい値のテストデータの配列を渡すメソッドを作成します。
(メソッド名に縛りはないです)
今回だとこんな感じになります。

注意点は

で宣言することです。

次にテストメソッドを作成します。
コメントの箇所にdataProviderアノテーションを使って、テストデータの配列を渡すメソッド名を指定します。
配列の各要素をテストメソッドの引数として渡していきます。
なので、引数の数や順番にはご注意ください。
今回だとこんな感じになります。

これでさっきの長~いテストメソッドと同じ意味になってます。

実行してみると、data_strメソッドで宣言している配列が渡されてテストできることが確認できます。

LaravelのPHPUnitのDataProviderの使い方を解説

ちなみにテストコードの全体は、こんな感じになります。

DataProviderがいかに、テストコードをスッキリさせたかが分かります。

まとめ:DataProviderを使ってみよう!

以上がPHPUnitのDataProviderの使い方の解説でした!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

コメント

タイトルとURLをコピーしました