Kiwi を使用してブロックをパラメーターとして受け取るメソッドをスタブしたいと考えています。コード付きの完全な説明は次のとおりです。
AFNetworkingを介してサーバーを呼び出し、ブロックを介してその応答を返すクラスに依存TestedClass
するメソッドを持つという名前のクラスがあります。コードへの変換:testedMethod
NetworkClass
@interface TestedClass : NSObject
-(void)testMethod;
@end
-(void)testMethod
{
NetworkClass *networkClass = [[NetworkClass alloc] init];
[networkClass networkMethod:^(id result)
{
// code that I want to test according to the block given which I want to stub
...
}];
}
typedef void (^NetworkClassCallback)(id result);
@interface NetworkClass : NSObject
-(void)networkMethod:(NetworkClassCallback)handler;
@end
-(void) networkMethod:(NetworkClassCallback)handler
{
NSDictionary *params = @{@"param":@", @"value"};
NSString *requestURL = [NSString stringWithFormat:@"www.someserver.com"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURLURLWithString:requestURL]];
NSURLRequest *request = [httpClient requestWithMethod:@"GET" path:requestURL parameters:params];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
handler(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
handler(nil);
}];
[operation start];
}
networkMethod
単体テストを行うためにKiwi を使用してブロックでスタブするにはどうすればよいtestMethod
ですか?
更新:キウイでこれを行う方法を見つけました。以下の私の回答を参照してください。