Laravelテストで、DataProvider/データプロバイダーの使い方

LaravelのテストでDataProviderを使っていますでしょうか。今回は、DataProviderとは。効果について述べていきます。

0-1. DataProviderとは

Laravel Unitテストにおけるテスト用のデータを生成する仕組みです。Unitテストには、様々なデータ生成の仕組みが存在します。そのうちの1つです。

0-2. DataProviderのメリット

では、様々なデータ生成の仕組みが存在するなかで、DataProviderのメリットはなんでしょうか。それは同じテストにおいて、データのみが異なる場合に非常に簡単に実行してくれます。

例えば、動物かどうかを確認するテスト を実行する際に。
確認するデータ(猿・像・ひまわり・ライオン ) に対して毎回テストを書いていたら面倒ですよね?? これをDataProviderを使えば簡単に全データをテストしてくれます。

1. DataProviderの書き方

1-1. DataProviderのメソッドを書く

> tests/AnimalTest.php

public function test_check_animal(){
//実行されるテスト
}


//これがDataProviderです。
public function animalTestData(){
        return [
            '猿'       => ['肺呼吸', 'move', '光合成ナシ'],
            '像'       => ['肺呼吸', 'move', '光合成ナシ'],
            'ひまわり'  => ['気孔と樹皮', 'stay', '光合成アリ'],
            'ライオン'  => ['肺呼吸', 'move', '光合成ナシ'],
        ];
}

注意点

  1. アクセス修飾子は public
  2. returnの中は連想配列で

1-2. DataProviderをテストメソッドで呼び出す

public function test_check_animal() でDataProviderを使ってみます。

> tests/AnimalTest.php

/**
 * @dataProvider animalTestData
 */
public function test_check_animal(string $breathing, string $move, bool $photosynthesis){
//実行されるテスト

}


//これがDataProviderです。
public function animalTestData(){
        return [
            '猿'       => ['肺呼吸', 'move', '光合成ナシ'],
            '像'       => ['肺呼吸', 'move', '光合成ナシ'],
            'ひまわり'  => ['気孔と樹皮', 'stay', '光合成アリ'],
            'ライオン'  => ['肺呼吸', 'move', '光合成ナシ'],
        ];
}

注意点

  1. DataProviderを利用するテストメソッドの上で、利用するDataProviderを宣言します。
    • @dataProvider animalTestData で宣言している部分です。
  2. テストメソッドでDataProviderのデータを引数で受け取ります。
    • string $breathing, string $move, bool $photosynthesis で引き受けている部分です。

以上です。

猿・像・ひまわり・ライオン の4種類のテストが1つのテストメソッドで実行出来ます。

コメントを残す

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