私のアプリの中には、インターネットからデータを取得するものがあります。単体テストを書く習慣がついてきました。インターネットから返された値のテストを書くと、遅延や信頼性の問題が発生するのではないかと思います。
「Web リクエストの反対側にある」データをテストする有効な方法は何ですか?
私は Xcode に付属しているストック ユニット テスト ツールキットを使用していますが、この質問は理論的にはどのテスト フレームワークにも当てはまります。
私のアプリの中には、インターネットからデータを取得するものがあります。単体テストを書く習慣がついてきました。インターネットから返された値のテストを書くと、遅延や信頼性の問題が発生するのではないかと思います。
「Web リクエストの反対側にある」データをテストする有効な方法は何ですか?
私は Xcode に付属しているストック ユニット テスト ツールキットを使用していますが、この質問は理論的にはどのテスト フレームワークにも当てはまります。
Unit
test は、特にクラスのビジネス ロジックに焦点を当てています。モックオブジェクトを使用して実際にやり取りするものをシミュレートするため、遅延や信頼性などはありません。
あなたが説明しているのは何らかの形式のintegration
テストであり、OP の場合は意図したものではないようです。
ネットワークやリモートデータベースなどに実際にアクセスしないように、モックによって相手側を「覆い隠す」必要があります。
とりわけ:
これらはすべて正常に失敗するはずです (サーバー側またはクライアント側のいずれか)。
私は freenode.net の #macdev IRC チャンネルで尊敬すべき人々にこの質問を投げかけ、いくつかの本当に良い答えを得ました。
Mike Ash ( mikeash.comの) は、私のアプリ内にローカル Web サーバーを実装することを提案しています。複雑なケースでは、おそらくこれを行うでしょう。ただし、組み込みのinitWithContentsOfURL:(NSURL *)url
メソッドの一部を使用しているだけですNSData
。
より単純なケースでは、base64 でエンコードされたダミー データを NSData イニシャライザに直接渡すという別の方法があると mike は言います。( を使用しdata://dummyDataEncodedAsBase64GoesAfterTheDataProtocolThingy
ます。)
同様に、"alistra" は、モック データを含むファイルを指すローカル ファイル URL を使用することを提案しています。