我们也使用 Mantle 很长一段时间,但最终迁移到手写解析器/序列化器,因为任务本身似乎很简单。
不过,我们也有这样的问题:如果服务器返回我们不期望的东西(例如NSDictionary
,而不是NSString
)怎么办。
为了防止我们的应用程序崩溃,我们使用了这个简单的工具:Fuzzer。
基本上,该工具提供了一种获取样本和块的方法。该块会评估多次,每次都会带来样本的轻微变异版本。您可以使用突变检查模型/解析器/序列化程序的行为,以确保您的代码优雅地处理意外数据。
这是取自项目自述文件的示例:
- (void)test {
NSDictionary *sample = @{
@“name” : @“John Doe”,
@“age” : @42
};
UserDeserializer *deserializer = [UserDeserializer new];
FZRRunner *runner = [FZRRunner runnerWithBuiltinMutationsForSample:sample];
NSArray *reports = [runner enumerateMutantsUsingBlock:^(NSDictionary *mutant) {
[deserializer deserializeUser:mutant];
}];
XCTAssertEqual(reports.count, 0);
}