2

iOS アプリに Swift を使用し、Alamofire を使用して HTTP 要求を実行しています。

自分の機能をカバーする単体テストを作成したいのですが、Alamofire によって実行される HTTP リクエストをスタブ化するのに問題があります。Nocilla (ブリッジング ヘッダーにインポート) を使用して HTTP リクエストをスタブしようとしていますが、HTTP リクエストへのコールバックがテストで到達しないようです。

テスト スイートで Alamofire の HTTP リクエストを正常にスタブ化した経験のある人がいるかどうか疑問に思っていましたか?

ありがとう!

4

1 に答える 1

7

まだ行っていませんが、これは HTTP 要求の単体テスト (具体的には REST API の呼び出し) に使用する一般的なパターンです。Alamofire と AFNetworking の両方でこれをうまく使用しました。

  1. Service私は通常、基礎となるネットワーク API (Alamofire、AFNetworking、または単に純粋な iOS API)を「ラップ」する (それを と呼びましょう) クラスを持っています。Service通常、ステートレスであり、アプリケーションの呼び出しを「より適切」にする責任があります。
  2. 私にとってServiceは、通常、使用しようとしている REST API と密接に関連しています。たとえば、Personコレクションへの POST を可能にする REST API を使用していた場合Service.PostPersonService.GetPerson、 などの API を使用します。
  3. Serviceを使用し、通常はinversion of control作成に使用するアプリケーション クラス (通常はコントローラー) Service
  4. 私の単体テストではUnitTestService、 クラスが のインスタンスではUnitTestServiceなく のインスタンスを使用するように を指定しますService
  5. 簡単にするために、UnitTestService通常、構成に基づいてハードコーディングされた JSON 応答を返します。したがって、上記の例では、ハードコードされた JSON 応答がService.PostPerson.

これを行うために、いくつかの手法を使用しました。

  • ServiceProtocolと の両方ServiceUnitTestService実装するプロトコルを持っている
  • Serviceクロージャーのセットでインスタンス化されたシングルを用意します。これらのクロージャーは実際の作業を行い、インターネットに接続しているか、それをモックしているかに応じて、さまざまなクロージャーを提供できます。

関数型プログラミングのバックグラウンドがあるので、後者が好きです。しかし、両方の手法が機能します。

于 2015-02-26T17:46:09.067 に答える