vierge-noire/cakephp-fixture-factoriesを使ってテストケースに用いるFixtureを都度生成して扱う
とりあえず社内に書いたドキュメントを置いとく #WIP なぜ導入するか
テストフィクスチャの表現力を高めるため
DBと連携したテストフィクスチャを用いる場合に、テストケースに応じた動的なテストフィクスチャを表現できる
CakePHP標準のテストフィクスチャは、テストケース実行時に定義済みの変数から呼び出せるだけであり、柔軟な表現力には欠ける
共通化されたテストフィクスチャ、"Shared Fixtures"と呼ばれるテクニックはテストの高速化を実現するが、場合によって使い分けられる柔軟性が欲しいところではある どういう使い分けをすべき?
テストフィクスチャが必要な場面で、CakePHP標準のFixtureクラスにデータを登録するよりもFactoryクラスを実装して利用することをおすすめします
一方で、動性が不要なデータ(DBに登録されてはいるが、大きく変更が走らないデータなど)によっては、CakePHP標準のFixtureクラスを用いることをおすすめします
- e.g. 記事のカテゴリデータ
> コードを追う前に気になったんですが、「cakephp-fixture-factoriesに移行する理由」は何だったんでしょう?
まず、 sizuhiko/cake_fabricate が正式にCakePHP4対応されていない点が挙げられます。今のところ "dev-cakephp4" というversion(要は開発中のcakephp4ブランチ)を参照している点やこの状況が2年近く変化がない現状を踏まえると、あまり開発が活発ではないパッケージであることも推察できるかと思います。その点、vierge-noire/cakephp-fixture-factories はCakePHP4にきちんと対応されています。
また、細かいですが、sizuhiko/cake_fabricate は association 関連の機能があまり柔軟でないことも挙げられます。RDBのリレーションを意識してデータを生成する機能面では明らかに vierge-noire/cakephp-fixture-factories の方が優っている印象です。Fixtureを生成する際に ArticleFactory::make()->with('Users', UserFactory::make()) と言うようなメソッドチェーンで表現できるのはとても便利です。
上記に加えて、「DBに保持しないフィクスチャも生成しやすくて便利」「bakeコマンド(bin/cake bake fixture_factory --all)で一通り追従できる」「開発が活発である」などなど有意な点が多く、独断ではありましたが採用するに至るであろうと判断しました。