RestKit:测试对象映射,'映射时失败......'

时间:2012-10-28 03:28:25

标签: ios unit-testing restkit

正如这个问题的标题所示,我正在使用RestKit,我想使用内置测试类来测试我的对象映射。我编写了一个小应用程序,它从一个(本地)web api获取一个User对象作为json。这部分有用,但我的测试用例告诉我它没有 - 嗯!

我关注Blake Watters Unit Testing With RestKit Guide,但我无法成功。让我再次澄清实际应用程序正常工作(我能够将json从API映射到User对象而没有问题),但是测试用例失败并显示如下所示的错误。因此,我怀疑我的测试是错误的。不知何故。

以下是一些代码:

错误消息

<RKMappingTest: 0xa242130>: failure when mapping from {
user =     {
    "first_name" = Kasper;
    id = 21;
    "last_name" = Fueled;
};
} to <User: 0xa23d730> with mapping <RKObjectMapping:0xa23d250 objectClass=User keyPath mappings => (
"RKObjectKeyPathMapping: id => userID",
"RKObjectKeyPathMapping: first_name => first_name",
"RKObjectKeyPathMapping: last_name => last_name",
)>. 

我注意到没有引用id键,而first_name和last_name是,但我不确定它是否有任何区别。

user.json(已更新:已删除逗号)

{ "user": {
       "id":21,
       "first_name":"Kasper",
       "last_name":"Fueled"
       }
}

user.json(旧)

{ "user": {
       "id":21,
       "first_name":"Kasper",
       "last_name":"Fueled",
       }
}

User.h

@property (strong, nonatomic) NSNumber *userID;
@property (strong, nonatomic) NSString *first_name;
@property (strong, nonatomic) NSString *last_name;

用户映射

+ (RKObjectMapping *)objectMapping {
    return [RKObjectMapping mappingForClass:[User class] usingBlock:^(RKObjectMapping *mapping) {
        [mapping mapKeyPath:@"id" toAttribute:@"userID"];
        [mapping mapKeyPath:@"first_name" toAttribute:@"first_name"];
        [mapping mapKeyPath:@"last_name" toAttribute:@"last_name"];
    }];
}

测试用例

- (void)testMapping {
    id parsedJSON = [RKTestFixture parsedObjectWithContentsOfFixture:@"user.json"];
    RKMappingTest *test = [RKMappingTest testForMapping:[User objectMapping] object:parsedJSON];

    [test expectMappingFromKeyPath:@"user.first_name" toKeyPath:@"first_name"];

    STAssertNoThrow([test verify], nil);
}

按照布莱克指南中的描述创建了夹具。

1 个答案:

答案 0 :(得分:0)

好的,尽管很尴尬,但我不会将解决方案发布到我的问题上。我的假设是我的测试设置出了问题,而不是我正在测试的代码,这是对的。事实证明在我的json fixture中最后一个键值对的末尾有一个逗号。我手写了json fixture而不是直接从我的API输出中复制它。因此,吸取的教训必须是:

将您尝试测试对象映射的json输出复制/粘贴到fixture文件中。不要只是手工输入 - 可能会发生拼写错误等。

希望我是社区中唯一一个以这种方式做(或做过!)的人。