正如这个问题的标题所示,我正在使用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": {
"id":21,
"first_name":"Kasper",
"last_name":"Fueled"
}
}
{ "user": {
"id":21,
"first_name":"Kasper",
"last_name":"Fueled",
}
}
@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);
}
按照布莱克指南中的描述创建了夹具。
答案 0 :(得分:0)
好的,尽管很尴尬,但我不会将解决方案发布到我的问题上。我的假设是我的测试设置出了问题,而不是我正在测试的代码,这是对的。事实证明在我的json fixture中最后一个键值对的末尾有一个逗号。我手写了json fixture而不是直接从我的API输出中复制它。因此,吸取的教训必须是:
希望我是社区中唯一一个以这种方式做(或做过!)的人。