正如这个问题的标题所示,我正在使用 RestKit,我想使用内置测试类来测试我的对象映射。我编写了一个小型应用程序,它从(本地)Web api 获取用户对象作为 json。这部分有效,但是,我的测试用例告诉我它没有 - 嗯!
我正在使用 RestKit 指南进行 Blake Watters 单元测试,但我无法成功。让我再次澄清一下,实际的应用程序工作正常(我能够毫无问题地将 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",
}
}
用户.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);
}
夹具是按照布莱克指南中的描述创建的。