ネットワークを使用するコードをテストしたい(具体的にはNSURLConnection
クラス)。私はネットワーキングを取り除くしたいユニットテストでNSURLConnectionによるユニットテスト
- (id) buildConnection
{
// some more code and then:
return [NSURLConnection …];
}
- (void) startNetworkSync
{
id connection = [self buildConnection];
//…
}
、すなわち:コードは(のはNetworkManager
それを呼びましょう)ビットのようになります。 NSURLConnection
オブジェクトをモックで置き換えてください。これはどうすればいいですか?
buildConnection
メソッドをスタブで置き換えるNetworkManager
の部分モックを作成しようとしました。問題は、OCMockによって行われた部分的なモックが、外部からのスタブメッセージのみであることです。startNetworkSync
からbuildConnection
を送信すると、スタブではなく元のメソッドが呼び出されます。
私はまた、カテゴリを通じてNetworkManager
クラスをサルでパッチしてみました。これはうまくいけば、他のコードでbuildConnection
メソッドを簡単にオーバーライドし、NSURLConnection
をスタブに置き換えることができます。問題は、テストでスタブ接続を取得する簡単な方法がないことです。接続はNetworkManager
のプライベートな部分です。
次に、NetworkManager
をサブクラス化し、buildConnection
メソッドをオーバーライドし、インスタンス変数と作成された接続のアクセサーを追加します。しかし、これはたくさんのコードのようです。
どうすれば解決できますか?私は、NetworkManager
クラスのデザインをきれいに保ち、多くの魔法やテストで多くのコードを必要としないソリューションを探しています。
OK、私は多かれ少なかれこのようにしました。クライアントはネットワークについては何も知らず、データの送受信しか行いませんが、テストに役立つ「外部」接続をプロセスに追加する方法を追加しました。ありがとう。 – zoul
@zoul、あなたの解決策のコードを貼り付けてください。ありがとう! – ma11hew28