この質問のタイトルが示すように、私は RestKit を使用しており、組み込みのテスト クラスを使用してオブジェクト マッピングをテストしたいと考えています。(ローカル) Web API から User オブジェクトを json として取得する小さなアプリケーションを作成しました。この部分は機能しますが、私のテスト ケースでは機能しないことがわかりました。
Blake Watters Unit Testing With RestKit Guideに従っていますが、成功できません。実際のアプリケーションは正常に動作することをもう一度明確にします (json を API からユーザー オブジェクトに問題なくマップできます) が、テスト ケースは以下に示すエラーで失敗します。したがって、どういうわけか、私のテストが間違っているのではないかと思います。
ここにいくつかのコードがあります:
エラーメッセージ
<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);
}
Blake のガイドに記載されているようにフィクスチャが作成されます。