SimpleTest を使用して、CakePHP (1.3) で基本的な CRUD 操作をテストしたいと考えています。
たとえば、新しいレコードを追加したいのですが、検証が失敗した場合はエラー メッセージが表示され、保存が成功した場合は新しいレコードが表示されるようにします。
これらのテストは、(1) 関連するアクション (add() など) のコントローラ テストとして記述するのと、(2) $this->post() または $this->setField() を使用して Web テストとして記述する方が良いですか?
1 に答える
これは古い質問ですが、まだ答えがないので、試してみます...
あなたが最初にする必要があるのは、あなたの懸念をよりよく分離することだと私は信じています. あなたが今していることは、少なくとも私にとっては、コードの匂いです...何かがおかしいということです!
どうやってこの結論に達したのですか?
さて、あなたが尋ねた質問と、それに対するあなたの答えです。あなたが求めている質問は次のとおりです。
「モデルの機能をテストするにはどうすればよいですか?」
あなたの答え:
「コントローラーまたはビューからテストする」
したがって、私が最初に行うことは、適切なモデルでメソッドをセットアップして、必要なことを行うことです。必要だと思うコードを書きます。レコードを保存し、思いついた条件ステートメントに基づいて、探している適切な値を返します。
その後、いくつかのフィクスチャをセットアップして、テストするデータを用意します。CakePHP のフィクスチャとその作成方法については、CakePHP のマニュアルhttp://book.cakephp.org/view/1201/Preparing-test-data で詳しく学ぶことができます(将来のプロジェクトでは、最初にフィクスチャを作成しますが、それは単なる個人的な好み)
フィクスチャをセットアップしたら、実際に先に進み、新しいモデル メソッドをテストできます。私の意見では、モデルのテストは、CakePHP でテストするのが最も簡単です。CakePHP のマニュアルhttp://book.cakephp.org/view/1207/Testing-modelsには、モデルのテスト方法に関する情報がたくさんあるため、ここでは詳細には触れません。
この時点で、適切に単体テストされたモデル アクションと適切に分離された懸念が必要です。
そうは言っても、あなたが非常に勇気があり、コードをあらゆる角度からテストしたい場合は、アクションが正しく実行されていることを確認するために、コントローラー テストを設定してください。パッケージ全体が連携して動作することを確認するために、Web テストをセットアップします。
ただし、最初に、懸念事項を分離してください。