ios - 如何模拟 AFHTTPClient 类和测试方法 getPath :parameters:success:failure:?

标签 ios objective-c mocking afnetworking ocmock

我是 AFNetworking 框架的新手。我已经实现了对服务器的简单 GET 请求。

@implementation MyClass
…

- (void)signInWithUsername:(NSString *)username andPassword:(NSString *)password withBlock:(SignInBlock)block {
[client getPath:@"test.json" parameters:Nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    block(YES, [responseObject objectForKey:@"access_token"]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    block(NO, nil);
}];
}

block 声明:

typedef void (^SignInBlock)(BOOL success, NSString *token);

我不知道如何正确模拟此 AFHTTPClient 对象以检查参数 block (SignInBlock) 是否已被调用以及使用什么参数。我怎样才能正确地做到这一点?

提前谢谢您。

最佳答案

我已经做到了。

- (void)testTokenInBlockShouldBeNotNil {

id mockClient = [OCMockObject mockForClass:[AFHTTPClient class]];

[[[mockClient expect] andDo:^(NSInvocation *invocation) {

    void (^successBlock)(AFHTTPRequestOperation *operation, id responseObject) = nil;

    [invocation getArgument:&successBlock atIndex:4];

    successBlock(nil, @{@"access_token" : @"this_is_a_token"});

}] getPath:[OCMArg any] parameters:[OCMArg any] success:[OCMArg any] failure:[OCMArg any]] ;

RKObjectManager *manager = [[RKObjectManager alloc] init];
manager.HTTPClient = mockClient;

TokenBlock block = ^(NSString *token) {
    XCTAssertNotNil(token, @"");
};

CTFAPIConnection *connection = [[CTFAPIConnection alloc] initWithManager:manager];
_accounts = [[CTFAPIAccounts alloc] initWithConnection:connection];
id mockAccounts = [OCMockObject partialMockForObject:_accounts];
[mockAccounts signInWithUsername:[OCMArg any] andPassword:[OCMArg any] withBlock:block];
}

关于ios - 如何模拟 AFHTTPClient 类和测试方法 getPath :parameters:success:failure:?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312064/

相关文章:

ios - methodSignatureForSelector 内存泄漏

python - 测试发生了多少方法调用以及传递了哪些参数(测试 django mixin 类)

java - 使用 mockito 验证对象属性值

python 模拟 sqlalchemy 连接

iphone - isBeingDismissed 未在 viewWillDisappear 中设置 :

iphone - 验证 Twitter 以获取 json feed

ios - 生产时使用什么语言? iOS系统

android - 如何减少我的 MAF 应用程序的内存大小

objective-c - UItable 单元格溢出 ios

iphone - 如何检查UILabel中的文本?