2016-12-26 14 views
2

私はGoogle Maps APIにヒットしたコードをテストしていますが、実際にはAPIを使用したくありません。私は有効なアドレスを渡すと、私は latlng属性を持つレスポンスオブジェクトを受け取るGoogle Maps APIの偽のテストレスポンスを作成

  1. 私がテストしたい2つのことが...基本的にあります。
  2. 無効なアドレスを渡すと、error属性の応答オブジェクト が返されます。

私のAPIをヒットしたときのテストはうまくいきましたが、私が言ったように、基本的には偽のAPIをヒットしたいので、テストはGoogleのAPIに依存しません。

私のコードを実際にテストするには、これを行う良い方法はありますか?私は合格テストをするために何かしたくない。むしろ、私はそれを実際のテストにしたい。ここで

は、応答でエラーを探します私のテストケースの一つである:

/** @test */ 
function an_error_attribute_is_returned_when_there_are_no_results() 
{ 
    $origin = ''; 
    $destination = ''; 
    $request = new GetDistanceRequest($origin, $destination); 

    $this->assertObjectHasAttribute('error', $request->receive()); 
} 

答えて

1

は、アプリケーションとGoogleマップとの統合テストのための代替はありませんが、本当にありません。

リクエストが成功したときにGoogleマップから返されたデータオブジェクトをアプリケーションが処理し、Googleマップからのエラー応答をコードで処理できることを簡単にテストできます。それらのリクエストから返されたレスポンスをコピーしてファイルとして保存し、フィクスチャとしてコードに提供することができます。この問題は、GoogleのAPIがテストデータと同期しなくなる可能性があることです。あなたのテストは合格している可能性があります。アプリケーションをプッシュするとapiを変更する可能性があり、アプリケーションにエラーが発生します。私は考えるかもしれません

カップルの事は、次のとおりです。

  • どのように可能性の高い彼らのAPIを変更するには、Googleがありますか?彼らはその歴史を持っていますか、彼らは正式なバージョン管理スキームにコミットしていますか?
  • テストアカウントを取得し、2回の統合テストを続けることは可能ですか?たぶん1日に1回のみ統合テストを実行しますか?またはマスターコミットのみ?理想的には、テストアカウントは、すべての単一のビルドとローカルで統合テストを実行するのに十分なクォータを提供します。
  • 定期的なGoogleの応答を保存することは可能ですか? 12時間ごとに言って??あなたは成功応答とエラー応答のためにGoogleマップにヒットし、それを静的ファイルストレージに保存するバックグラウンドサービスを持つことができます。それからあなたのテストはすべての実行の前にそれを引き下げることができます。私は、これがAPIリクエストの制限/レート制限と新鮮さとの間のOKの妥協であるかもしれないと思う。しかし、ほとんどの作業が必要になります。

実行可能な場合は、実際のサービスに対して可能な限り頻繁にテストすることはありません。

+0

ワウ。洞察に感謝します。現時点では、単体テストを変更する必要があるAPIに当たっています。私は、応答をテストするためにフィクスチャを使用し、Googleの応答で何も変わっていないことを常に確認するアイデアが気に入っています。ご協力いただきありがとうございます! – dericcain