I want to stub a method which takes a block as a parameter using Kiwi. Here is the full explanation with code:
I have a class named TestedClass
which has a method testedMethod
which dependent on class NetworkClass
which calls via AFNetworking to a server, and return its response via block. Translating to code:
@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];
}
How can I use Kiwi to stub networkMethod
with block in order to unit test testMethod
?
UPDATE: Found how to do this in Kiwi, see my answer below.
TestedClass
NetworkClass
instance? (it's either areadonly
or a private property)? Is this possible? – Phospholipide