PHPのFakerを使ってテストデータを自動生成する
PHPでユニットテストを書いていると、適当なテストデータが必要になる。 毎回テストとかHoge的なテストデータを使っていたので、ちゃんとしたテストデータを使いたかった。 PHPにはFakerというランダムにテストデータを生成してくれるライブラリがあるので早速使ってみた。
PHPのFaker自体はPerlの Data::Faker
とRuby Faker
にインスパイアされたものらしい。
PHPでも使えるようにしてもらえて感謝。
- テスト用にディレクトリ作成
$ mkdir faker-sample $ cd faker-sample
- FakerをComposer経由でインストールする
$ composer require fzaninotto/faker
- インタラクティブモードで実行
$ php -a Interactive shell php > // Fakerのオートーロードをrequireする php > require_once 'vendor/fzaninotto/faker/src/autoload.php'; php > // Faker\Generatorインスタンスを生成する php > $faker = Faker\Factory::create(); php > echo $faker->name; Dr. Zachery Ledner V php > echo $faker->address; 860 Jaskolski Gateway Apt. 806 Rutherfordville, ID 44854-0067 php > echo $faker->text; Nemo ipsa placeat aut et nostrum perferendis et. Neque dolor accusantium sint sit. php >
デフォルトではロケールが en_US
になっているため、英語になる。
ただし、textは何故かラテン語...
- ロケールを
ja_JP
にすると日本語になる
php > require_once 'vendor/fzaninotto/faker/src/autoload.php'; php > $faker = Faker\Factory::create('ja_JP'); php > echo $faker->name; 伊藤 春香 php > echo $faker->address; 9584833 佐賀県西之園市東区吉本町佐藤2-4-6 php > echo $faker->text; Nemo maxime suscipit ut. Enim veritatis enim libero quas necessitatibus id. Et ad aspernatur iusto. Accusamus ut dolores consequuntur. php >
日本語にするとより自動生成されたテストデータがリアルなものに感じます。 それでもtextはまだラテン語...
ソースを読んでみると都道府県や名前情報を配列でもっている。
Fakerで自動生成できるデータは日本語では現在以下の6種類ある。 日本語形式でなくてもよければ他にも使える。
- 住所
- 企業
- インターネット
- 人
- 電話番号
- テキスト
どんなものを自動生成してくれるかと、呼び出し方はここのソース読むとわかる。 直下の 各ロケール内のクラスが継承している親クラスと、使いたいロケール内にあるクラスのメソッドをプロパティとして呼び出すことで使うことができる。
- 人(Person)の場合
php > // 共通メソッド(Person.php) php > echo $faker->name; 藤本 晃 php > echo $faker->firstName; 学 php > echo $faker->firstNameMale; 修平 php > echo $faker->firstNameFemale; 幹 php > echo $faker->lastName; 近藤 php > echo $faker->title; Dr. php > echo $faker->titleMale; Mr. php > echo $faker->titleFemale; Prof. php > // ja_JPロケールで定義されているメソッド (ja_JP/Person.php) php > echo $faker->kanaName; ワタナベ マアヤ php > echo $faker->firstKanaName; リョウヘイ php > echo $faker->firstKanaNameMale; トモヤ php > echo $faker->firstKanaNameFemale; リカ php > echo $faker->lastKanaName;
使えるテストデータの種類が多いのでPHPUnitでテストする際には必須級のライブラリです。インストールと使い方もとても簡単なのでガンガン使っていきたいと思います。既にかなりお世話になってるけど。