質問: いろいろ調べながら CakePHP3で始めてテストコードを書いています。 理解が正しいのか不安なのですが、 現在、テストに関わるデータとして FixtureとSeedとテストデータが あると考えており、簡単に以下の理解をしております。 ・Fixture テスト開始時にDBに予め登録しておくデータ(TearDownで削除) ・Seed 本番環境で実際に使うデータ(テストには使わない方が良い) ・テストデータ テスト対象のプロセスに対してインプットする値 また、いまやろうとしていることを 以下に示します。 ーーーーーーーーーーーー ■テスト概要 customersテーブルに対する顧客登録のテスト ■customersテーブルの概要とテストパターン ・入力項目は name と email ・テスト項目を合計35パターン用意。 ■テスト対象 ・customersTableに顧客登録のメソッドを書いたのでこれをユニットテストしたい。 ・customersControllerで顧客登録フォームのロジックを書いたのでこれを結合テストしたい。 ーーーーーーーーーーーー 上記のことを行う場合、 customersテーブルのテストとcustomersControllerのテストは、 同じテストデータ(35パターンのテストデータ)を使うことになります。 ですので、テストデータを一元管理しようと思い、 testsディレクトリの中などにTestDataディレクトリを作り、 そこでCustomersTestDataなどのクラスを用意しようかと考えています。 最初、Fixtureで同じことができるのでは?と考えたのですが、 Fixutreはあくまでテスト実行前にDBをテスト開始状態にしておくもの と解釈しており、正常系しか入力しないものと考えています。 しかしネット等で調べてもそのような記述は見つからず、、、 そもそも考え方が間違っているのではないかと 不安になり、こちらで質問をしております。 方向性としてどこか勘違い、理解不足の点ありませんでしょうか? アドバイスを頂きたいと思います。
回答: ご認識の通り、フィクスチャは、テスト実行前にDBに投入されるデータなので、テスト時の入力パターンを定義する場所としては不適切だと思います。emailの重複チェックなどの目的で事前にDBに投入するデータがあるのであれば、フィクスチャを使えばいいと思います。 テスト実行時の入力パターンの定義については、複数の場所で利用されるのであれば、クラスなどを自前で作って管理するのは、別に間違ってはいないと思います。ただ、コントローラのテストとモデルのテストでは、実行の結果(出力)が異なってくる気がするので、それはどうするのか気になりました。