如何在RestKit方法中测试映射postObject:path:parameters:success:failure:with OCMock

时间:2013-12-04 06:20:04

标签: objective-c unit-testing tdd restkit ocmock

几天前,我明白应该如何使用OCMock为RestKit编写测试。

测试方法:

- (void)signUpWithUsername:(NSString *)username email:(NSString *)email password:(NSString *)password block:(SignUpBlock)block {

if (!username || !email || !password) {
    return;
}

CTFUser *user = [CTFUser createObject];
user.username = username;
user.email = email;
user.password = password;
[_connection.manager postObject:user path:@"path" parameters:nil
                        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                            block(YES);
                        } failure:^(RKObjectRequestOperation *operation, NSError *error) {
                            block(NO);
                        }];
}

测试用例(检查休息套件调用成功块后是否调用了自定义块):      - (void)testBlockShouldReturnYesIfSuccess {     id mockClient = [OCMockObject mockForClass:[AFHTTPClient class]];

RKObjectManager *manager = [[RKObjectManager alloc] init];
manager.HTTPClient = mockClient;
id mockMananger = [OCMockObject partialMockForObject:manager];

[[[mockMananger expect] andDo:^(NSInvocation *invocation) {
    void (^successblock)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) = nil;
    [invocation getArgument:&successblock atIndex:5];
    successblock(nil, OCMOCK_ANY);
}] postObject:OCMOCK_ANY path:OCMOCK_ANY parameters:nil success:OCMOCK_ANY failure:OCMOCK_ANY];

SignUpBlock block = ^(BOOL success) {
    XCTAssertTrue(success, @"");
};

CTFAPIConnection *connection = [[CTFAPIConnection alloc] initWithManager:mockMananger];
_accounts = [[CTFAPIAccounts alloc] initWithConnection:connection];
id mockAccounts = [OCMockObject partialMockForObject:_accounts];
[mockAccounts signUpWithUsername:@"username" email:@"email" password:@"password" block:block];
}

此测试通过。但是如何测试此请求和响应的映射是否正常?此测试不会检查我是否应该使用响应和请求制作一些JSON夹具?下一步是什么?

我想测试什么? - 如果请求和响应映射正常(这对我来说很难实现测试应该如何)

提前谢谢

1 个答案:

答案 0 :(得分:0)

好的,我找到了一些不错的资源。 https://github.com/RestKit/RestKit/wiki/Unit-Testing-with-RestKit。如果我理解我应该测试与实际请求隔离的JSON灯具的映射,第二个好方法是创建一些只返回一些灯具的测试服务器。