4

私のアプリの中には、インターネットからデータを取得するものがあります。単体テストを書く習慣がついてきました。インターネットから返された値のテストを書くと、遅延や信頼性の問題が発生するのではないかと思います。

「Web リクエストの反対側にある」データをテストする有効な方法は何ですか?

私は Xcode に付属しているストック ユニット テスト ツールキットを使用していますが、この質問は理論的にはどのテスト フレームワークにも当てはまります。

4

3 に答える 3

3

Unittest は、特にクラスのビジネス ロジックに焦点を当てています。モックオブジェクトを使用して実際にやり取りするものをシミュレートするため、遅延や信頼性などはありません。
あなたが説明しているのは何らかの形式のintegrationテストであり、OP の場合は意図したものではないようです。
ネットワークやリモートデータベースなどに実際にアクセスしないように、モックによって相手側を「覆い隠す」必要があります。

于 2013-03-31T17:08:12.330 に答える
1

とりわけ:

  • リクエストに人為的なレイテンシーを導入する
  • 同じネットワーク上の別のマシンまたは少なくとも別の VM を使用する
  • 接続の失敗をテストします (存在しないサーバーに接続するか、接続を物理的に切断します)
  • 不完全なデータのテスト (接続が途中で切断される可能性があります)
  • 重複データのテスト (アプリが成功しなかったと判断した場合、リクエストを複数回送信しようとする可能性があります。シナリオによっては、データが失われる可能性があります)

これらはすべて正常に失敗するはずです (サーバー側またはクライアント側のいずれか)。

于 2013-03-31T17:07:21.643 に答える
1

私は freenode.net の #macdev IRC チャンネルで尊敬すべき人々にこの質問を投げかけ、いくつかの本当に良い答えを得ました。

Mike Ash ( mikeash.comの) は、私のアプリ内にローカル Web サーバーを実装することを提案しています。複雑なケースでは、おそらくこれを行うでしょう。ただし、組み込みのinitWithContentsOfURL:(NSURL *)urlメソッドの一部を使用しているだけですNSData

より単純なケースでは、base64 でエンコードされたダミー データを NSData イニシャライザに直接渡すという別の方法があると mike は言います。( を使用しdata://dummyDataEncodedAsBase64GoesAfterTheDataProtocolThingyます。)

同様に、"alistra" は、モック データを含むファイルを指すローカル ファイル URL を使用することを提案しています。

于 2013-03-31T17:40:28.503 に答える