web-dev-qa-db-ja.com

APIを単体テストする方法は?

私はREST API for CakePHP 1.3を使用して記述されたAPIのユニットテストを記述する必要があるところです。このAPIはGET、POSTおよびデータのクエリと操作。

fixturesを使用して、HTTPリクエストをシミュレートするAPIの正しい入出力をテストする確立された方法はありますか?ライブ(dev)データベースに対して実際のPOST/PUTリクエストを実行したくありません。一時的なモデルを使用するようにシステムをモックアウトしながら、残りのスタックをそのままテストするにはどうすればよいですか?


GETリクエストのテストは コントローラーテスト で十分簡単です。ただし、データ操作では、APIはHTTPヘッダーを非常に広範囲に使用し、未加工のXMLおよびJSON POST/PUTデータも解析します。コントローラーユニットテストメソッドのみモックPOST $this->dataコントローラーで、APIを適切にテストできません。

49
deceze
5
Craig Trader

API環境をシミュレートするには、モックを作成するか、分離フレームワークを使用する必要があります。単体テストは、インターネット接続、ネットワーク、エンドポイントなどのリソースに依存するべきではありません。

実際のAPI呼び出しをテストする場合は、統合テストプロジェクトを作成して、この目的で使用する必要があります。ただし、統合テストはほとんどの場合繰り返し可能ではなく、実行ごとに異なる結果が得られることに注意してください。

5
Teoman shipahi

生のXML PUTとPOSTデータをあまり問題なくテストできるかもしれません。 CakePHP RESTドキュメント は言うこの:

POSTまたはPUTリクエストにXML content-typeがある場合、入力が取得され、コントローラの$ dataプロパティに割り当てられているCakeのXmlオブジェクトのインスタンスに渡されます。この機能のXMLとPOSTデータの並列処理はシームレスです。コントローラーやモデルコードを変更する必要はありません。必要なものはすべて$ this-> dataに含まれるはずです。

デバッグモードでコントローラーコードをステップ実行して、XMLリクエスト中に実際に$this->dataから何が入ってくるかを確認してください。

ライブデータベースの回避については、SQLiteインメモリデータベースの方が簡単でしょうか。

3
Don Kirkby