メソッドのコード:内部で共同作業者をインスタンス化するメソッドの単体テストを書く方法は?そのような
- (void)downloadSomething:(NSString *)url {
Downloader *downloader = [[Downloader alloc] initWithUrl:url];
NSData *data = [downloader download];
FileCache *cache = [[FileCache alloc] initWithFile:@"download.cache"];
cache.data = data;
[cache save];
}
私はそれがうまく動作するかどうかを確認するためのダウンローダとファイルキャッシュを模擬すべきだと思います。 私はそのような変更の署名について考えました:downloadSomething:(NSString *)url downloader:(Downloader *)downloader cache:(FileCache *)cache
、しかし、それは私が欲しいものではない、このメソッドを呼び出す前に多くの仕事をしなければならないようだ。
私はocmockitoを使用しています。
さらに、コードを書くことをよりテスト可能にするガイドがありますか?
編集:2017年1月16日午後02時54分23秒
は、これはのような2つのメソッドを作成することをお勧めします:コラボはメソッド内でインスタンス化されると
- (void)updateCacheWithUrl:(NSString *)url
downloader:(Downloader *)downloader
fileCache:(FileCache *)fileCache; // for testing
- (void)updateCacheWithUrl:(NSString *)url; // call above method with (url, nil, nil);
おそらく私はメソッドを 'updateCacheWithUrl:'に改名する必要があります。 – ccnyou
私はたくさんのことを考えました。 'Downloader * downloader = [[Downloader alloc] initWithUrl:url];'と書いたところでは、そのメソッドをテストするのが難しくなります。私はそれを私的な方法で書いて、そのテストを書いてはいけませんか? – ccnyou
@ccnyou Downloaderを1つの方法で作った場合、私はファクトリとして動作するブロックパラメータを渡します。複数のメソッドにまたがっている場合は、パラメータからプロパティに変更します。 –