考虑一下:
+(NSDictionary *)getDictionaryFromData:(id)data {
@synchronized(self) {
NSError *error = nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
if (error) {
DLog(@"SERIALIZATION FAILED: %@", error.localizedDescription);
return nil;
}
DLog(@"SUCCESS: %@", dict);
return dict;
}
}
如果错误不是nil,如何模拟 getDictionaryFromData 来获取覆盖率?是否有可能或者我必须实际模拟 JSONObjectWithData 方法?
答案 0 :(得分:2)
对于这个答案,我假设您实际上并不想模仿 getDictionaryFromData:
方法。我假设你想测试它的实现,它是如何处理错误的情况。
您可以存根JSONObjectWithData:options:error:
方法并在pass参数中返回错误;不知何故这样:
id serializerMock = [OCMock mockForClass:[NSJSONSerialization class]];
NSError *theError = /* create an error */
[[[serializerMock stub] andReturn:nil] JSONObjectWithData:data
options:NSJSONReadingAllowFragments error:[OCMArg setTo:theError]];
这里的诀窍显然是setTo:
方法。
答案 1 :(得分:0)
这对我有用(OCMock 3):
id serializerMock = OCMClassMock(NSJSONSerialization.class);
NSError *theError = [[NSError alloc] initWithDomain:NSCocoaErrorDomain code:NSPropertyListWriteInvalidError userInfo:nil];
OCMStub(ClassMethod([serializerMock dataWithJSONObject:OCMOCK_ANY
options:0
error:[OCMArg setTo:theError]]));
注意:对于第[serializerMock dataWithJSONObject...]
行,Xcode的代码完成不起作用。